Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 399b6c3b authored by Arve Hjønnevåg's avatar Arve Hjønnevåg
Browse files

ServiceManager: Use 32/64 bit types from new binder header

Change-Id: I1bd7c38ed9f43125cf9c63aa533434ee7ca06f80
parent 84e625ac
Loading
Loading
Loading
Loading
+26 −25
Original line number Diff line number Diff line
/* Copyright 2008 The Android Open Source Project
 */

#include <inttypes.h>
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
@@ -41,18 +42,18 @@ void hexdump(void *_data, size_t len)
void binder_dump_txn(struct binder_transaction_data *txn)
{
    struct flat_binder_object *obj;
    size_t *offs = txn->data.ptr.offsets;
    size_t count = txn->offsets_size / sizeof(size_t);

    fprintf(stderr,"  target %p  cookie %p  code %08x  flags %08x\n",
            txn->target.ptr, txn->cookie, txn->code, txn->flags);
    fprintf(stderr,"  pid %8d  uid %8d  data %zu  offs %zu\n",
            txn->sender_pid, txn->sender_euid, txn->data_size, txn->offsets_size);
    hexdump(txn->data.ptr.buffer, txn->data_size);
    binder_size_t *offs = (binder_size_t *)(uintptr_t)txn->data.ptr.offsets;
    size_t count = txn->offsets_size / sizeof(binder_size_t);

    fprintf(stderr,"  target %016"PRIx64"  cookie %016"PRIx64"  code %08x  flags %08x\n",
            (uint64_t)txn->target.ptr, (uint64_t)txn->cookie, txn->code, txn->flags);
    fprintf(stderr,"  pid %8d  uid %8d  data %"PRIu64"  offs %"PRIu64"\n",
            txn->sender_pid, txn->sender_euid, (uint64_t)txn->data_size, (uint64_t)txn->offsets_size);
    hexdump((void *)(uintptr_t)txn->data.ptr.buffer, txn->data_size);
    while (count--) {
        obj = (struct flat_binder_object *) (((char*) txn->data.ptr.buffer) + *offs++);
        fprintf(stderr,"  - type %08x  flags %08x  ptr %p  cookie %p\n",
                obj->type, obj->flags, obj->binder, obj->cookie);
        obj = (struct flat_binder_object *) (((char*)(uintptr_t)txn->data.ptr.buffer) + *offs++);
        fprintf(stderr,"  - type %08x  flags %08x  ptr %016"PRIx64"  cookie %016"PRIx64"\n",
                obj->type, obj->flags, (uint64_t)obj->binder, (uint64_t)obj->cookie);
    }
}

@@ -165,18 +166,18 @@ int binder_write(struct binder_state *bs, void *data, size_t len)

void binder_send_reply(struct binder_state *bs,
                       struct binder_io *reply,
                       const void *buffer_to_free,
                       binder_uintptr_t buffer_to_free,
                       int status)
{
    struct {
        uint32_t cmd_free;
        uintptr_t buffer;
        binder_uintptr_t buffer;
        uint32_t cmd_reply;
        struct binder_transaction_data txn;
    } __attribute__((packed)) data;

    data.cmd_free = BC_FREE_BUFFER;
    data.buffer = (uintptr_t) buffer_to_free;
    data.buffer = buffer_to_free;
    data.cmd_reply = BC_REPLY;
    data.txn.target.ptr = 0;
    data.txn.cookie = 0;
@@ -185,14 +186,14 @@ void binder_send_reply(struct binder_state *bs,
        data.txn.flags = TF_STATUS_CODE;
        data.txn.data_size = sizeof(int);
        data.txn.offsets_size = 0;
        data.txn.data.ptr.buffer = &status;
        data.txn.data.ptr.buffer = (uintptr_t)&status;
        data.txn.data.ptr.offsets = 0;
    } else {
        data.txn.flags = 0;
        data.txn.data_size = reply->data - reply->data0;
        data.txn.offsets_size = ((char*) reply->offs) - ((char*) reply->offs0);
        data.txn.data.ptr.buffer = reply->data0;
        data.txn.data.ptr.offsets = reply->offs0;
        data.txn.data.ptr.buffer = (uintptr_t)reply->data0;
        data.txn.data.ptr.offsets = (uintptr_t)reply->offs0;
    }
    binder_write(bs, &data, sizeof(data));
}
@@ -219,7 +220,7 @@ int binder_parse(struct binder_state *bs, struct binder_io *bio,
        case BR_RELEASE:
        case BR_DECREFS:
#if TRACE
            fprintf(stderr,"  %p, %p\n", ptr, (ptr + sizeof(void *)));
            fprintf(stderr,"  %p, %p\n", (void *)ptr, (void *)(ptr + sizeof(void *)));
#endif
            ptr += sizeof(struct binder_ptr_cookie);
            break;
@@ -262,8 +263,8 @@ int binder_parse(struct binder_state *bs, struct binder_io *bio,
            break;
        }
        case BR_DEAD_BINDER: {
            struct binder_death *death = (struct binder_death *) *(intptr_t *)ptr;
            ptr += sizeof(void *);
            struct binder_death *death = (struct binder_death *)(uintptr_t) *(binder_uintptr_t *)ptr;
            ptr += sizeof(binder_uintptr_t);
            death->func(bs, death->ptr);
            break;
        }
@@ -334,8 +335,8 @@ int binder_call(struct binder_state *bs,
    writebuf.txn.flags = 0;
    writebuf.txn.data_size = msg->data - msg->data0;
    writebuf.txn.offsets_size = ((char*) msg->offs) - ((char*) msg->offs0);
    writebuf.txn.data.ptr.buffer = msg->data0;
    writebuf.txn.data.ptr.offsets = msg->offs0;
    writebuf.txn.data.ptr.buffer = (uintptr_t)msg->data0;
    writebuf.txn.data.ptr.offsets = (uintptr_t)msg->offs0;

    bwr.write_size = sizeof(writebuf);
    bwr.write_consumed = 0;
@@ -404,8 +405,8 @@ void binder_loop(struct binder_state *bs, binder_handler func)

void bio_init_from_txn(struct binder_io *bio, struct binder_transaction_data *txn)
{
    bio->data = bio->data0 = txn->data.ptr.buffer;
    bio->offs = bio->offs0 = txn->data.ptr.offsets;
    bio->data = bio->data0 = (char *)(intptr_t)txn->data.ptr.buffer;
    bio->offs = bio->offs0 = (binder_size_t *)(intptr_t)txn->data.ptr.offsets;
    bio->data_avail = txn->data_size;
    bio->offs_avail = txn->offsets_size / sizeof(size_t);
    bio->flags = BIO_F_SHARED;
@@ -494,7 +495,7 @@ void bio_put_obj(struct binder_io *bio, void *ptr)

    obj->flags = 0x7f | FLAT_BINDER_FLAG_ACCEPTS_FDS;
    obj->type = BINDER_TYPE_BINDER;
    obj->binder = ptr;
    obj->binder = (uintptr_t)ptr;
    obj->cookie = 0;
}

+2 −2
Original line number Diff line number Diff line
@@ -12,12 +12,12 @@ struct binder_state;
struct binder_io
{
    char *data;            /* pointer to read/write from */
    size_t *offs;          /* array of offsets */
    binder_size_t *offs;   /* array of offsets */
    size_t data_avail;     /* bytes available in data buffer */
    size_t offs_avail;     /* entries available in offsets array */

    char *data0;           /* start of data buffer */
    size_t *offs0;         /* start of offsets buffer */
    binder_size_t *offs0;  /* start of offsets buffer */
    uint32_t flags;
    uint32_t unused;
};