Skip to content

Commit 64d1776

Browse files
committed
fix android build
1 parent 2a336e5 commit 64d1776

7 files changed

Lines changed: 25 additions & 23 deletions

File tree

android/jni/Android.mk

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,12 +8,13 @@ LOCAL_CFLAGS := -DTHREAD_SUPPORT=1 -pthread \
88
-Wno-format-pedantic -DMALLOC_HOOK=1 -fvisibility=hidden -std=c11 \
99
-DALLOC_SANITY=0 -DUNINIT_READ_SANITY=0 -DCPU_PIN=0 -DEXPERIMENTAL=0 \
1010
-DUAF_PTR_PAGE=0 -DVERIFY_BIT_SLOT_CACHE=0 -DNAMED_MAPPINGS=1 -fPIC \
11-
-shared -DDEBUG=1 -DLEAK_DETECTOR=1 -DMEM_USAGE=1 -DUSE_MLOCK=1 -DSCHED_GETCPU \
12-
-g -ggdb3 -fno-omit-frame-pointer
11+
-shared -DDEBUG=1 -DLEAK_DETECTOR=1 -DMEM_USAGE=1 -DUSE_MLOCK=1 \
12+
-DMEMORY_TAGGING=0 -DSCHED_GETCPU -g -ggdb3 -fno-omit-frame-pointer
1313

1414
LOCAL_SRC_FILES := ../../src/iso_alloc.c ../../src/iso_alloc_printf.c ../../src/iso_alloc_random.c \
1515
../../src/iso_alloc_search.c ../../src/iso_alloc_interfaces.c ../../src/iso_alloc_profiler.c \
16-
../../src/iso_alloc_sanity.c ../../src/iso_alloc_util.c ../../src/malloc_hook.c
16+
../../src/iso_alloc_sanity.c ../../src/iso_alloc_util.c ../../src/malloc_hook.c \
17+
../../src/libc_hook.c ../../src/iso_alloc_mem_tags.c
1718

1819
LOCAL_C_INCLUDES := ../../include/
1920

android/jni/Application.mk

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
11
APP_ABI := arm64-v8a x86_64
2-
APP_PLATFORM := android-23
2+
APP_PLATFORM := android-28

src/iso_alloc.c

Lines changed: 8 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -511,7 +511,7 @@ INTERNAL_HIDDEN iso_alloc_zone_t *_iso_new_zone(size_t size, bool internal, int3
511511
* but when we call create_canary_chunks() that will happen anyway */
512512
p = mmap_rw_pages(total_size, false, name);
513513

514-
#if NAMED_MAPPINGS && __ANDROID__
514+
#if __ANDROID__ && NAMED_MAPPINGS && MEMORY_TAGGING
515515
if(new_zone->tagged == false) {
516516
name = MEM_TAG_NAME;
517517
}
@@ -1205,15 +1205,13 @@ INTERNAL_HIDDEN iso_alloc_zone_t *iso_find_zone_bitmap_range(const void *restric
12051205
return zone;
12061206
}
12071207

1208-
iso_alloc_zone_t *tmp_zone = NULL;
1209-
12101208
/* Now we check the MRU thread zone cache */
12111209
for(int64_t i = 0; i < zone_cache_count; i++) {
1212-
tmp_zone = zone_cache[i].zone;
1213-
bitmap_start = UNMASK_BITMAP_PTR(tmp_zone);
1210+
zone = zone_cache[i].zone;
1211+
bitmap_start = UNMASK_BITMAP_PTR(zone);
12141212

1215-
if(bitmap_start <= p && (bitmap_start + tmp_zone->bitmap_size) > p) {
1216-
return tmp_zone;
1213+
if(bitmap_start <= p && (bitmap_start + zone->bitmap_size) > p) {
1214+
return zone;
12171215
}
12181216
}
12191217

@@ -1240,15 +1238,13 @@ INTERNAL_HIDDEN iso_alloc_zone_t *iso_find_zone_range(const void *restrict p) {
12401238
return zone;
12411239
}
12421240

1243-
iso_alloc_zone_t *tmp_zone = NULL;
1244-
12451241
/* Now we check the MRU thread zone cache */
12461242
for(int64_t i = 0; i < zone_cache_count; i++) {
1247-
tmp_zone = zone_cache[i].zone;
1248-
user_pages_start = UNMASK_USER_PTR(tmp_zone);
1243+
zone = zone_cache[i].zone;
1244+
user_pages_start = UNMASK_USER_PTR(zone);
12491245

12501246
if(user_pages_start <= p && (user_pages_start + ZONE_USER_SIZE) > p) {
1251-
return tmp_zone;
1247+
return zone;
12521248
}
12531249
}
12541250

src/iso_alloc_interfaces.c

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -175,12 +175,7 @@ EXTERNAL_API NO_DISCARD MALLOC_ATTR void *iso_alloc_from_zone_tagged(iso_alloc_z
175175
iso_alloc_zone_t *_zone = (iso_alloc_zone_t *) zone;
176176

177177
void *p = _iso_alloc(zone, _zone->chunk_size);
178-
179-
#if MEMORY_TAGGING
180178
return _tag_ptr(p, zone);
181-
#else
182-
return p;
183-
#endif
184179
}
185180

186181
EXTERNAL_API NO_DISCARD void *iso_alloc_tag_ptr(void *p, iso_alloc_zone_handle *zone) {

src/iso_alloc_mem_tags.c

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,22 +23,30 @@ INTERNAL_HIDDEN uint8_t _iso_alloc_get_mem_tag(void *p, iso_alloc_zone_t *zone)
2323
}
2424

2525
INTERNAL_HIDDEN void *_tag_ptr(void *p, iso_alloc_zone_t *zone) {
26+
#if MEMORY_TAGGING
2627
if(UNLIKELY(p == NULL || zone == NULL)) {
2728
return NULL;
2829
}
2930

3031
const uint64_t tag = _iso_alloc_get_mem_tag(p, zone);
3132
return (void *) ((tag << UNTAGGED_BITS) | (uintptr_t) p);
33+
#else
34+
return p;
35+
#endif
3236
}
3337

3438
INTERNAL_HIDDEN void *_untag_ptr(void *p, iso_alloc_zone_t *zone) {
39+
#if MEMORY_TAGGING
3540
if(UNLIKELY(p == NULL || zone == NULL)) {
3641
return NULL;
3742
}
3843

3944
void *untagged_p = (void *) ((uintptr_t) p & TAGGED_PTR_MASK);
4045
const uint64_t tag = _iso_alloc_get_mem_tag(untagged_p, zone);
4146
return (void *) ((tag << UNTAGGED_BITS) ^ (uintptr_t) p);
47+
#else
48+
return p;
49+
#endif
4250
}
4351

4452
INTERNAL_HIDDEN bool _refresh_zone_mem_tags(iso_alloc_zone_t *zone) {

src/iso_alloc_random.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
#include <sys/syscall.h>
1414
#elif __APPLE__
1515
#include <Security/SecRandom.h>
16-
#elif __FreeBSD__ || __linux__
16+
#elif __FreeBSD__ || __linux__ || __ANDROID__
1717
#include <sys/random.h>
1818
#else
1919
#error "unknown OS"
@@ -32,7 +32,7 @@ INTERNAL_HIDDEN uint64_t rand_uint64(void) {
3232
ret = syscall(SYS_getrandom, &val, sizeof(val), GRND_NONBLOCK) != sizeof(val);
3333
#elif __APPLE__
3434
ret = SecRandomCopyBytes(kSecRandomDefault, sizeof(val), &val);
35-
#elif __FreeBSD__ || __linux__
35+
#elif __FreeBSD__ || __linux__ || __ANDROID__
3636
ret = getrandom(&val, sizeof(val), GRND_NONBLOCK) != sizeof(val);
3737
#endif
3838

src/malloc_hook.c

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -114,8 +114,10 @@ static void *libc_memalign(size_t alignment, size_t s, const void *caller) {
114114
return iso_alloc(s);
115115
}
116116

117+
#if !__ANDROID__
117118
void *(*__malloc_hook)(size_t, const void *) = &libc_malloc;
118119
void *(*__realloc_hook)(void *, size_t, const void *) = &libc_realloc;
119120
void (*__free_hook)(void *, const void *) = &libc_free;
120121
void *(*__memalign_hook)(size_t, size_t, const void *) = &libc_memalign;
121122
#endif
123+
#endif

0 commit comments

Comments
 (0)