Skip to content

Instantly share code, notes, and snippets.

@Lanchon
Created October 1, 2014 20:01
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save Lanchon/9bbd717f96346c7e15b0 to your computer and use it in GitHub Desktop.
Save Lanchon/9bbd717f96346c7e15b0 to your computer and use it in GitHub Desktop.
CM11-M10 sdcard.c listing
ARM GAS /tmp/cc3I8rcL.s page 1
1 .syntax unified
2 .cpu cortex-a15
3 .eabi_attribute 27, 3
4 .fpu neon
5 .eabi_attribute 20, 1
6 .eabi_attribute 21, 1
7 .eabi_attribute 23, 3
8 .eabi_attribute 24, 1
9 .eabi_attribute 25, 1
10 .eabi_attribute 26, 2
11 .eabi_attribute 30, 4
12 .eabi_attribute 34, 1
13 .eabi_attribute 18, 4
14 .thumb
15 .file "sdcard.c"
16 .text
17 .Ltext0:
18 .cfi_sections .debug_frame
19 .section .text.int_hash,"ax",%progbits
20 .align 1
21 .thumb
22 .thumb_func
24 int_hash:
25 .fnstart
26 .LFB62:
27 .file 1 "system/core/sdcard/sdcard.c"
1:system/core/sdcard/sdcard.c **** /*
2:system/core/sdcard/sdcard.c **** * Copyright (C) 2010 The Android Open Source Project
3:system/core/sdcard/sdcard.c **** *
4:system/core/sdcard/sdcard.c **** * Licensed under the Apache License, Version 2.0 (the "License");
5:system/core/sdcard/sdcard.c **** * you may not use this file except in compliance with the License.
6:system/core/sdcard/sdcard.c **** * You may obtain a copy of the License at
7:system/core/sdcard/sdcard.c **** *
8:system/core/sdcard/sdcard.c **** * http://www.apache.org/licenses/LICENSE-2.0
9:system/core/sdcard/sdcard.c **** *
10:system/core/sdcard/sdcard.c **** * Unless required by applicable law or agreed to in writing, software
11:system/core/sdcard/sdcard.c **** * distributed under the License is distributed on an "AS IS" BASIS,
12:system/core/sdcard/sdcard.c **** * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13:system/core/sdcard/sdcard.c **** * See the License for the specific language governing permissions and
14:system/core/sdcard/sdcard.c **** * limitations under the License.
15:system/core/sdcard/sdcard.c **** */
16:system/core/sdcard/sdcard.c ****
17:system/core/sdcard/sdcard.c **** #include <stdio.h>
18:system/core/sdcard/sdcard.c **** #include <stdlib.h>
19:system/core/sdcard/sdcard.c **** #include <string.h>
20:system/core/sdcard/sdcard.c **** #include <unistd.h>
21:system/core/sdcard/sdcard.c **** #include <errno.h>
22:system/core/sdcard/sdcard.c **** #include <fcntl.h>
23:system/core/sdcard/sdcard.c **** #include <sys/mount.h>
24:system/core/sdcard/sdcard.c **** #include <sys/stat.h>
25:system/core/sdcard/sdcard.c **** #include <sys/statfs.h>
26:system/core/sdcard/sdcard.c **** #include <sys/uio.h>
27:system/core/sdcard/sdcard.c **** #include <dirent.h>
28:system/core/sdcard/sdcard.c **** #include <limits.h>
29:system/core/sdcard/sdcard.c **** #include <ctype.h>
30:system/core/sdcard/sdcard.c **** #include <pthread.h>
31:system/core/sdcard/sdcard.c **** #include <sys/time.h>
ARM GAS /tmp/cc3I8rcL.s page 2
32:system/core/sdcard/sdcard.c **** #include <sys/resource.h>
33:system/core/sdcard/sdcard.c **** #include <sys/inotify.h>
34:system/core/sdcard/sdcard.c ****
35:system/core/sdcard/sdcard.c **** #include <cutils/fs.h>
36:system/core/sdcard/sdcard.c **** #include <cutils/hashmap.h>
37:system/core/sdcard/sdcard.c **** #include <cutils/multiuser.h>
38:system/core/sdcard/sdcard.c ****
39:system/core/sdcard/sdcard.c **** #include <private/android_filesystem_config.h>
40:system/core/sdcard/sdcard.c ****
41:system/core/sdcard/sdcard.c **** #include "fuse.h"
42:system/core/sdcard/sdcard.c ****
43:system/core/sdcard/sdcard.c **** /* README
44:system/core/sdcard/sdcard.c **** *
45:system/core/sdcard/sdcard.c **** * What is this?
46:system/core/sdcard/sdcard.c **** *
47:system/core/sdcard/sdcard.c **** * sdcard is a program that uses FUSE to emulate FAT-on-sdcard style
48:system/core/sdcard/sdcard.c **** * directory permissions (all files are given fixed owner, group, and
49:system/core/sdcard/sdcard.c **** * permissions at creation, owner, group, and permissions are not
50:system/core/sdcard/sdcard.c **** * changeable, symlinks and hardlinks are not createable, etc.
51:system/core/sdcard/sdcard.c **** *
52:system/core/sdcard/sdcard.c **** * See usage() for command line options.
53:system/core/sdcard/sdcard.c **** *
54:system/core/sdcard/sdcard.c **** * It must be run as root, but will drop to requested UID/GID as soon as it
55:system/core/sdcard/sdcard.c **** * mounts a filesystem. It will refuse to run if requested UID/GID are zero.
56:system/core/sdcard/sdcard.c **** *
57:system/core/sdcard/sdcard.c **** * Things I believe to be true:
58:system/core/sdcard/sdcard.c **** *
59:system/core/sdcard/sdcard.c **** * - ops that return a fuse_entry (LOOKUP, MKNOD, MKDIR, LINK, SYMLINK,
60:system/core/sdcard/sdcard.c **** * CREAT) must bump that node's refcount
61:system/core/sdcard/sdcard.c **** * - don't forget that FORGET can forget multiple references (req->nlookup)
62:system/core/sdcard/sdcard.c **** * - if an op that returns a fuse_entry fails writing the reply to the
63:system/core/sdcard/sdcard.c **** * kernel, you must rollback the refcount to reflect the reference the
64:system/core/sdcard/sdcard.c **** * kernel did not actually acquire
65:system/core/sdcard/sdcard.c **** *
66:system/core/sdcard/sdcard.c **** * This daemon can also derive custom filesystem permissions based on directory
67:system/core/sdcard/sdcard.c **** * structure when requested. These custom permissions support several features:
68:system/core/sdcard/sdcard.c **** *
69:system/core/sdcard/sdcard.c **** * - Apps can access their own files in /Android/data/com.example/ without
70:system/core/sdcard/sdcard.c **** * requiring any additional GIDs.
71:system/core/sdcard/sdcard.c **** * - Separate permissions for protecting directories like Pictures and Music.
72:system/core/sdcard/sdcard.c **** * - Multi-user separation on the same physical device.
73:system/core/sdcard/sdcard.c **** *
74:system/core/sdcard/sdcard.c **** * The derived permissions look like this:
75:system/core/sdcard/sdcard.c **** *
76:system/core/sdcard/sdcard.c **** * rwxrwx--x root:sdcard_rw /
77:system/core/sdcard/sdcard.c **** * rwxrwx--- root:sdcard_pics /Pictures
78:system/core/sdcard/sdcard.c **** * rwxrwx--- root:sdcard_av /Music
79:system/core/sdcard/sdcard.c **** *
80:system/core/sdcard/sdcard.c **** * rwxrwx--x root:sdcard_rw /Android
81:system/core/sdcard/sdcard.c **** * rwxrwx--x root:sdcard_rw /Android/data
82:system/core/sdcard/sdcard.c **** * rwxrwx--- u0_a12:sdcard_rw /Android/data/com.example
83:system/core/sdcard/sdcard.c **** * rwxrwx--x root:sdcard_rw /Android/obb/
84:system/core/sdcard/sdcard.c **** * rwxrwx--- u0_a12:sdcard_rw /Android/obb/com.example
85:system/core/sdcard/sdcard.c **** *
86:system/core/sdcard/sdcard.c **** * rwxrwx--- root:sdcard_all /Android/user
87:system/core/sdcard/sdcard.c **** * rwxrwx--x root:sdcard_rw /Android/user/10
88:system/core/sdcard/sdcard.c **** * rwxrwx--- u10_a12:sdcard_rw /Android/user/10/Android/data/com.example
ARM GAS /tmp/cc3I8rcL.s page 3
89:system/core/sdcard/sdcard.c **** */
90:system/core/sdcard/sdcard.c ****
91:system/core/sdcard/sdcard.c **** #define FUSE_TRACE 0
92:system/core/sdcard/sdcard.c ****
93:system/core/sdcard/sdcard.c **** #if FUSE_TRACE
94:system/core/sdcard/sdcard.c **** #define TRACE(x...) fprintf(stderr,x)
95:system/core/sdcard/sdcard.c **** #else
96:system/core/sdcard/sdcard.c **** #define TRACE(x...) do {} while (0)
97:system/core/sdcard/sdcard.c **** #endif
98:system/core/sdcard/sdcard.c ****
99:system/core/sdcard/sdcard.c **** #define ERROR(x...) fprintf(stderr,x)
100:system/core/sdcard/sdcard.c ****
101:system/core/sdcard/sdcard.c **** #define FUSE_UNKNOWN_INO 0xffffffff
102:system/core/sdcard/sdcard.c ****
103:system/core/sdcard/sdcard.c **** /* Maximum number of bytes to write in one request. */
104:system/core/sdcard/sdcard.c **** #define MAX_WRITE (256 * 1024)
105:system/core/sdcard/sdcard.c ****
106:system/core/sdcard/sdcard.c **** /* Maximum number of bytes to read in one request. */
107:system/core/sdcard/sdcard.c **** #define MAX_READ (128 * 1024)
108:system/core/sdcard/sdcard.c ****
109:system/core/sdcard/sdcard.c **** /* Largest possible request.
110:system/core/sdcard/sdcard.c **** * The request size is bounded by the maximum size of a FUSE_WRITE request because it has
111:system/core/sdcard/sdcard.c **** * the largest possible data payload. */
112:system/core/sdcard/sdcard.c **** #define MAX_REQUEST_SIZE (sizeof(struct fuse_in_header) + sizeof(struct fuse_write_in) + MAX_WRITE)
113:system/core/sdcard/sdcard.c ****
114:system/core/sdcard/sdcard.c **** /* Default number of threads. */
115:system/core/sdcard/sdcard.c **** #define DEFAULT_NUM_THREADS 2
116:system/core/sdcard/sdcard.c ****
117:system/core/sdcard/sdcard.c **** /* Pseudo-error constant used to indicate that no fuse status is needed
118:system/core/sdcard/sdcard.c **** * or that a reply has already been written. */
119:system/core/sdcard/sdcard.c **** #define NO_STATUS 1
120:system/core/sdcard/sdcard.c ****
121:system/core/sdcard/sdcard.c **** /* Path to system-provided mapping of package name to appIds */
122:system/core/sdcard/sdcard.c **** static const char* const kPackagesListFile = "/data/system/packages.list";
123:system/core/sdcard/sdcard.c ****
124:system/core/sdcard/sdcard.c **** /* Supplementary groups to execute with */
125:system/core/sdcard/sdcard.c **** static const gid_t kGroups[1] = { AID_PACKAGE_INFO };
126:system/core/sdcard/sdcard.c ****
127:system/core/sdcard/sdcard.c **** /* Permission mode for a specific node. Controls how file permissions
128:system/core/sdcard/sdcard.c **** * are derived for children nodes. */
129:system/core/sdcard/sdcard.c **** typedef enum {
130:system/core/sdcard/sdcard.c **** /* Nothing special; this node should just inherit from its parent. */
131:system/core/sdcard/sdcard.c **** PERM_INHERIT,
132:system/core/sdcard/sdcard.c **** /* This node is one level above a normal root; used for legacy layouts
133:system/core/sdcard/sdcard.c **** * which use the first level to represent user_id. */
134:system/core/sdcard/sdcard.c **** PERM_LEGACY_PRE_ROOT,
135:system/core/sdcard/sdcard.c **** /* This node is "/" */
136:system/core/sdcard/sdcard.c **** PERM_ROOT,
137:system/core/sdcard/sdcard.c **** /* This node is "/Android" */
138:system/core/sdcard/sdcard.c **** PERM_ANDROID,
139:system/core/sdcard/sdcard.c **** /* This node is "/Android/data" */
140:system/core/sdcard/sdcard.c **** PERM_ANDROID_DATA,
141:system/core/sdcard/sdcard.c **** /* This node is "/Android/obb" */
142:system/core/sdcard/sdcard.c **** PERM_ANDROID_OBB,
143:system/core/sdcard/sdcard.c **** /* This node is "/Android/user" */
144:system/core/sdcard/sdcard.c **** PERM_ANDROID_USER,
145:system/core/sdcard/sdcard.c **** } perm_t;
ARM GAS /tmp/cc3I8rcL.s page 4
146:system/core/sdcard/sdcard.c ****
147:system/core/sdcard/sdcard.c **** /* Permissions structure to derive */
148:system/core/sdcard/sdcard.c **** typedef enum {
149:system/core/sdcard/sdcard.c **** DERIVE_NONE,
150:system/core/sdcard/sdcard.c **** DERIVE_LEGACY,
151:system/core/sdcard/sdcard.c **** DERIVE_UNIFIED,
152:system/core/sdcard/sdcard.c **** } derive_t;
153:system/core/sdcard/sdcard.c ****
154:system/core/sdcard/sdcard.c **** struct handle {
155:system/core/sdcard/sdcard.c **** int fd;
156:system/core/sdcard/sdcard.c **** };
157:system/core/sdcard/sdcard.c ****
158:system/core/sdcard/sdcard.c **** struct dirhandle {
159:system/core/sdcard/sdcard.c **** DIR *d;
160:system/core/sdcard/sdcard.c **** };
161:system/core/sdcard/sdcard.c ****
162:system/core/sdcard/sdcard.c **** struct node {
163:system/core/sdcard/sdcard.c **** __u32 refcount;
164:system/core/sdcard/sdcard.c **** __u64 nid;
165:system/core/sdcard/sdcard.c **** __u64 gen;
166:system/core/sdcard/sdcard.c ****
167:system/core/sdcard/sdcard.c **** /* State derived based on current position in hierarchy. */
168:system/core/sdcard/sdcard.c **** perm_t perm;
169:system/core/sdcard/sdcard.c **** userid_t userid;
170:system/core/sdcard/sdcard.c **** uid_t uid;
171:system/core/sdcard/sdcard.c **** gid_t gid;
172:system/core/sdcard/sdcard.c **** mode_t mode;
173:system/core/sdcard/sdcard.c ****
174:system/core/sdcard/sdcard.c **** struct node *next; /* per-dir sibling list */
175:system/core/sdcard/sdcard.c **** struct node *child; /* first contained file by this dir */
176:system/core/sdcard/sdcard.c **** struct node *parent; /* containing directory */
177:system/core/sdcard/sdcard.c ****
178:system/core/sdcard/sdcard.c **** size_t namelen;
179:system/core/sdcard/sdcard.c **** char *name;
180:system/core/sdcard/sdcard.c **** /* If non-null, this is the real name of the file in the underlying storage.
181:system/core/sdcard/sdcard.c **** * This may differ from the field "name" only by case.
182:system/core/sdcard/sdcard.c **** * strlen(actual_name) will always equal strlen(name), so it is safe to use
183:system/core/sdcard/sdcard.c **** * namelen for both fields.
184:system/core/sdcard/sdcard.c **** */
185:system/core/sdcard/sdcard.c **** char *actual_name;
186:system/core/sdcard/sdcard.c ****
187:system/core/sdcard/sdcard.c **** /* If non-null, an exact underlying path that should be grafted into this
188:system/core/sdcard/sdcard.c **** * position. Used to support things like OBB. */
189:system/core/sdcard/sdcard.c **** char* graft_path;
190:system/core/sdcard/sdcard.c **** size_t graft_pathlen;
191:system/core/sdcard/sdcard.c **** };
192:system/core/sdcard/sdcard.c ****
193:system/core/sdcard/sdcard.c **** static int str_hash(void *key) {
194:system/core/sdcard/sdcard.c **** return hashmapHash(key, strlen(key));
195:system/core/sdcard/sdcard.c **** }
196:system/core/sdcard/sdcard.c ****
197:system/core/sdcard/sdcard.c **** /** Test if two string keys are equal ignoring case */
198:system/core/sdcard/sdcard.c **** static bool str_icase_equals(void *keyA, void *keyB) {
199:system/core/sdcard/sdcard.c **** return strcasecmp(keyA, keyB) == 0;
200:system/core/sdcard/sdcard.c **** }
201:system/core/sdcard/sdcard.c ****
202:system/core/sdcard/sdcard.c **** static int int_hash(void *key) {
ARM GAS /tmp/cc3I8rcL.s page 5
28 .loc 1 202 0
29 .cfi_startproc
30 @ args = 0, pretend = 0, frame = 0
31 @ frame_needed = 0, uses_anonymous_args = 0
32 @ link register save eliminated.
33 .LVL0:
203:system/core/sdcard/sdcard.c **** return (int) key;
204:system/core/sdcard/sdcard.c **** }
34 .loc 1 204 0
35 0000 7047 bx lr
36 .cfi_endproc
37 .LFE62:
38 .fnend
40 .section .text.int_equals,"ax",%progbits
41 .align 1
42 .thumb
43 .thumb_func
45 int_equals:
46 .fnstart
47 .LFB63:
205:system/core/sdcard/sdcard.c ****
206:system/core/sdcard/sdcard.c **** static bool int_equals(void *keyA, void *keyB) {
48 .loc 1 206 0
49 .cfi_startproc
50 @ args = 0, pretend = 0, frame = 0
51 @ frame_needed = 0, uses_anonymous_args = 0
52 @ link register save eliminated.
53 .LVL1:
207:system/core/sdcard/sdcard.c **** return keyA == keyB;
208:system/core/sdcard/sdcard.c **** }
54 .loc 1 208 0
55 0000 0B1A subs r3, r1, r0
56 0002 5842 rsbs r0, r3, #0
57 .LVL2:
58 0004 5841 adcs r0, r0, r3
59 0006 7047 bx lr
60 .cfi_endproc
61 .LFE63:
62 .fnend
64 .section .text.usage,"ax",%progbits
65 .align 1
66 .thumb
67 .thumb_func
69 usage:
70 .fnstart
71 .LFB118:
209:system/core/sdcard/sdcard.c ****
210:system/core/sdcard/sdcard.c **** /* Global data structure shared by all fuse handlers. */
211:system/core/sdcard/sdcard.c **** struct fuse {
212:system/core/sdcard/sdcard.c **** pthread_mutex_t lock;
213:system/core/sdcard/sdcard.c ****
214:system/core/sdcard/sdcard.c **** __u64 next_generation;
215:system/core/sdcard/sdcard.c **** int fd;
216:system/core/sdcard/sdcard.c **** derive_t derive;
217:system/core/sdcard/sdcard.c **** bool split_perms;
218:system/core/sdcard/sdcard.c **** gid_t write_gid;
219:system/core/sdcard/sdcard.c **** struct node root;
ARM GAS /tmp/cc3I8rcL.s page 6
220:system/core/sdcard/sdcard.c **** char obbpath[PATH_MAX];
221:system/core/sdcard/sdcard.c ****
222:system/core/sdcard/sdcard.c **** Hashmap* package_to_appid;
223:system/core/sdcard/sdcard.c **** Hashmap* appid_with_rw;
224:system/core/sdcard/sdcard.c **** };
225:system/core/sdcard/sdcard.c ****
226:system/core/sdcard/sdcard.c **** /* Private data used by a single fuse handler. */
227:system/core/sdcard/sdcard.c **** struct fuse_handler {
228:system/core/sdcard/sdcard.c **** struct fuse* fuse;
229:system/core/sdcard/sdcard.c **** int token;
230:system/core/sdcard/sdcard.c ****
231:system/core/sdcard/sdcard.c **** /* To save memory, we never use the contents of the request buffer and the read
232:system/core/sdcard/sdcard.c **** * buffer at the same time. This allows us to share the underlying storage. */
233:system/core/sdcard/sdcard.c **** union {
234:system/core/sdcard/sdcard.c **** __u8 request_buffer[MAX_REQUEST_SIZE];
235:system/core/sdcard/sdcard.c **** __u8 read_buffer[MAX_READ];
236:system/core/sdcard/sdcard.c **** };
237:system/core/sdcard/sdcard.c **** };
238:system/core/sdcard/sdcard.c ****
239:system/core/sdcard/sdcard.c **** static inline void *id_to_ptr(__u64 nid)
240:system/core/sdcard/sdcard.c **** {
241:system/core/sdcard/sdcard.c **** return (void *) (uintptr_t) nid;
242:system/core/sdcard/sdcard.c **** }
243:system/core/sdcard/sdcard.c ****
244:system/core/sdcard/sdcard.c **** static inline __u64 ptr_to_id(void *ptr)
245:system/core/sdcard/sdcard.c **** {
246:system/core/sdcard/sdcard.c **** return (__u64) (uintptr_t) ptr;
247:system/core/sdcard/sdcard.c **** }
248:system/core/sdcard/sdcard.c ****
249:system/core/sdcard/sdcard.c **** static void acquire_node_locked(struct node* node)
250:system/core/sdcard/sdcard.c **** {
251:system/core/sdcard/sdcard.c **** node->refcount++;
252:system/core/sdcard/sdcard.c **** TRACE("ACQUIRE %p (%s) rc=%d\n", node, node->name, node->refcount);
253:system/core/sdcard/sdcard.c **** }
254:system/core/sdcard/sdcard.c ****
255:system/core/sdcard/sdcard.c **** static void remove_node_from_parent_locked(struct node* node);
256:system/core/sdcard/sdcard.c ****
257:system/core/sdcard/sdcard.c **** static void release_node_locked(struct node* node)
258:system/core/sdcard/sdcard.c **** {
259:system/core/sdcard/sdcard.c **** TRACE("RELEASE %p (%s) rc=%d\n", node, node->name, node->refcount);
260:system/core/sdcard/sdcard.c **** if (node->refcount > 0) {
261:system/core/sdcard/sdcard.c **** node->refcount--;
262:system/core/sdcard/sdcard.c **** if (!node->refcount) {
263:system/core/sdcard/sdcard.c **** TRACE("DESTROY %p (%s)\n", node, node->name);
264:system/core/sdcard/sdcard.c **** remove_node_from_parent_locked(node);
265:system/core/sdcard/sdcard.c ****
266:system/core/sdcard/sdcard.c **** /* TODO: remove debugging - poison memory */
267:system/core/sdcard/sdcard.c **** memset(node->name, 0xef, node->namelen);
268:system/core/sdcard/sdcard.c **** free(node->name);
269:system/core/sdcard/sdcard.c **** free(node->actual_name);
270:system/core/sdcard/sdcard.c **** memset(node, 0xfc, sizeof(*node));
271:system/core/sdcard/sdcard.c **** free(node);
272:system/core/sdcard/sdcard.c **** }
273:system/core/sdcard/sdcard.c **** } else {
274:system/core/sdcard/sdcard.c **** ERROR("Zero refcnt %p\n", node);
275:system/core/sdcard/sdcard.c **** }
276:system/core/sdcard/sdcard.c **** }
ARM GAS /tmp/cc3I8rcL.s page 7
277:system/core/sdcard/sdcard.c ****
278:system/core/sdcard/sdcard.c **** static void add_node_to_parent_locked(struct node *node, struct node *parent) {
279:system/core/sdcard/sdcard.c **** node->parent = parent;
280:system/core/sdcard/sdcard.c **** node->next = parent->child;
281:system/core/sdcard/sdcard.c **** parent->child = node;
282:system/core/sdcard/sdcard.c **** acquire_node_locked(parent);
283:system/core/sdcard/sdcard.c **** }
284:system/core/sdcard/sdcard.c ****
285:system/core/sdcard/sdcard.c **** static void remove_node_from_parent_locked(struct node* node)
286:system/core/sdcard/sdcard.c **** {
287:system/core/sdcard/sdcard.c **** if (node->parent) {
288:system/core/sdcard/sdcard.c **** if (node->parent->child == node) {
289:system/core/sdcard/sdcard.c **** node->parent->child = node->parent->child->next;
290:system/core/sdcard/sdcard.c **** } else {
291:system/core/sdcard/sdcard.c **** struct node *node2;
292:system/core/sdcard/sdcard.c **** node2 = node->parent->child;
293:system/core/sdcard/sdcard.c **** while (node2->next != node)
294:system/core/sdcard/sdcard.c **** node2 = node2->next;
295:system/core/sdcard/sdcard.c **** node2->next = node->next;
296:system/core/sdcard/sdcard.c **** }
297:system/core/sdcard/sdcard.c **** release_node_locked(node->parent);
298:system/core/sdcard/sdcard.c **** node->parent = NULL;
299:system/core/sdcard/sdcard.c **** node->next = NULL;
300:system/core/sdcard/sdcard.c **** }
301:system/core/sdcard/sdcard.c **** }
302:system/core/sdcard/sdcard.c ****
303:system/core/sdcard/sdcard.c **** /* Gets the absolute path to a node into the provided buffer.
304:system/core/sdcard/sdcard.c **** *
305:system/core/sdcard/sdcard.c **** * Populates 'buf' with the path and returns the length of the path on success,
306:system/core/sdcard/sdcard.c **** * or returns -1 if the path is too long for the provided buffer.
307:system/core/sdcard/sdcard.c **** */
308:system/core/sdcard/sdcard.c **** static ssize_t get_node_path_locked(struct node* node, char* buf, size_t bufsize) {
309:system/core/sdcard/sdcard.c **** const char* name;
310:system/core/sdcard/sdcard.c **** size_t namelen;
311:system/core/sdcard/sdcard.c **** if (node->graft_path) {
312:system/core/sdcard/sdcard.c **** name = node->graft_path;
313:system/core/sdcard/sdcard.c **** namelen = node->graft_pathlen;
314:system/core/sdcard/sdcard.c **** } else if (node->actual_name) {
315:system/core/sdcard/sdcard.c **** name = node->actual_name;
316:system/core/sdcard/sdcard.c **** namelen = node->namelen;
317:system/core/sdcard/sdcard.c **** } else {
318:system/core/sdcard/sdcard.c **** name = node->name;
319:system/core/sdcard/sdcard.c **** namelen = node->namelen;
320:system/core/sdcard/sdcard.c **** }
321:system/core/sdcard/sdcard.c ****
322:system/core/sdcard/sdcard.c **** if (bufsize < namelen + 1) {
323:system/core/sdcard/sdcard.c **** return -1;
324:system/core/sdcard/sdcard.c **** }
325:system/core/sdcard/sdcard.c ****
326:system/core/sdcard/sdcard.c **** ssize_t pathlen = 0;
327:system/core/sdcard/sdcard.c **** if (node->parent && node->graft_path == NULL) {
328:system/core/sdcard/sdcard.c **** pathlen = get_node_path_locked(node->parent, buf, bufsize - namelen - 2);
329:system/core/sdcard/sdcard.c **** if (pathlen < 0) {
330:system/core/sdcard/sdcard.c **** return -1;
331:system/core/sdcard/sdcard.c **** }
332:system/core/sdcard/sdcard.c **** buf[pathlen++] = '/';
333:system/core/sdcard/sdcard.c **** }
ARM GAS /tmp/cc3I8rcL.s page 8
334:system/core/sdcard/sdcard.c ****
335:system/core/sdcard/sdcard.c **** memcpy(buf + pathlen, name, namelen + 1); /* include trailing \0 */
336:system/core/sdcard/sdcard.c **** return pathlen + namelen;
337:system/core/sdcard/sdcard.c **** }
338:system/core/sdcard/sdcard.c ****
339:system/core/sdcard/sdcard.c **** /* Finds the absolute path of a file within a given directory.
340:system/core/sdcard/sdcard.c **** * Performs a case-insensitive search for the file and sets the buffer to the path
341:system/core/sdcard/sdcard.c **** * of the first matching file. If 'search' is zero or if no match is found, sets
342:system/core/sdcard/sdcard.c **** * the buffer to the path that the file would have, assuming the name were case-sensitive.
343:system/core/sdcard/sdcard.c **** *
344:system/core/sdcard/sdcard.c **** * Populates 'buf' with the path and returns the actual name (within 'buf') on success,
345:system/core/sdcard/sdcard.c **** * or returns NULL if the path is too long for the provided buffer.
346:system/core/sdcard/sdcard.c **** */
347:system/core/sdcard/sdcard.c **** static char* find_file_within(const char* path, const char* name,
348:system/core/sdcard/sdcard.c **** char* buf, size_t bufsize, int search)
349:system/core/sdcard/sdcard.c **** {
350:system/core/sdcard/sdcard.c **** size_t pathlen = strlen(path);
351:system/core/sdcard/sdcard.c **** size_t namelen = strlen(name);
352:system/core/sdcard/sdcard.c **** size_t childlen = pathlen + namelen + 1;
353:system/core/sdcard/sdcard.c **** char* actual;
354:system/core/sdcard/sdcard.c ****
355:system/core/sdcard/sdcard.c **** if (bufsize <= childlen) {
356:system/core/sdcard/sdcard.c **** return NULL;
357:system/core/sdcard/sdcard.c **** }
358:system/core/sdcard/sdcard.c ****
359:system/core/sdcard/sdcard.c **** memcpy(buf, path, pathlen);
360:system/core/sdcard/sdcard.c **** buf[pathlen] = '/';
361:system/core/sdcard/sdcard.c **** actual = buf + pathlen + 1;
362:system/core/sdcard/sdcard.c **** memcpy(actual, name, namelen + 1);
363:system/core/sdcard/sdcard.c ****
364:system/core/sdcard/sdcard.c **** if (search && access(buf, F_OK)) {
365:system/core/sdcard/sdcard.c **** struct dirent* entry;
366:system/core/sdcard/sdcard.c **** DIR* dir = opendir(path);
367:system/core/sdcard/sdcard.c **** if (!dir) {
368:system/core/sdcard/sdcard.c **** ERROR("opendir %s failed: %s\n", path, strerror(errno));
369:system/core/sdcard/sdcard.c **** return actual;
370:system/core/sdcard/sdcard.c **** }
371:system/core/sdcard/sdcard.c **** while ((entry = readdir(dir))) {
372:system/core/sdcard/sdcard.c **** if (!strcasecmp(entry->d_name, name)) {
373:system/core/sdcard/sdcard.c **** /* we have a match - replace the name, don't need to copy the null again */
374:system/core/sdcard/sdcard.c **** memcpy(actual, entry->d_name, namelen);
375:system/core/sdcard/sdcard.c **** break;
376:system/core/sdcard/sdcard.c **** }
377:system/core/sdcard/sdcard.c **** }
378:system/core/sdcard/sdcard.c **** closedir(dir);
379:system/core/sdcard/sdcard.c **** }
380:system/core/sdcard/sdcard.c **** return actual;
381:system/core/sdcard/sdcard.c **** }
382:system/core/sdcard/sdcard.c ****
383:system/core/sdcard/sdcard.c **** static void attr_from_stat(struct fuse_attr *attr, const struct stat *s, const struct node* node)
384:system/core/sdcard/sdcard.c **** {
385:system/core/sdcard/sdcard.c **** attr->ino = node->nid;
386:system/core/sdcard/sdcard.c **** attr->size = s->st_size;
387:system/core/sdcard/sdcard.c **** attr->blocks = s->st_blocks;
388:system/core/sdcard/sdcard.c **** attr->atime = s->st_atime;
389:system/core/sdcard/sdcard.c **** attr->mtime = s->st_mtime;
390:system/core/sdcard/sdcard.c **** attr->ctime = s->st_ctime;
ARM GAS /tmp/cc3I8rcL.s page 9
391:system/core/sdcard/sdcard.c **** attr->atimensec = s->st_atime_nsec;
392:system/core/sdcard/sdcard.c **** attr->mtimensec = s->st_mtime_nsec;
393:system/core/sdcard/sdcard.c **** attr->ctimensec = s->st_ctime_nsec;
394:system/core/sdcard/sdcard.c **** attr->mode = s->st_mode;
395:system/core/sdcard/sdcard.c **** attr->nlink = s->st_nlink;
396:system/core/sdcard/sdcard.c ****
397:system/core/sdcard/sdcard.c **** attr->uid = node->uid;
398:system/core/sdcard/sdcard.c **** attr->gid = node->gid;
399:system/core/sdcard/sdcard.c ****
400:system/core/sdcard/sdcard.c **** /* Filter requested mode based on underlying file, and
401:system/core/sdcard/sdcard.c **** * pass through file type. */
402:system/core/sdcard/sdcard.c **** int owner_mode = s->st_mode & 0700;
403:system/core/sdcard/sdcard.c **** int filtered_mode = node->mode & (owner_mode | (owner_mode >> 3) | (owner_mode >> 6));
404:system/core/sdcard/sdcard.c **** attr->mode = (attr->mode & S_IFMT) | filtered_mode;
405:system/core/sdcard/sdcard.c **** }
406:system/core/sdcard/sdcard.c ****
407:system/core/sdcard/sdcard.c **** static int touch(char* path, mode_t mode) {
408:system/core/sdcard/sdcard.c **** int fd = open(path, O_RDWR | O_CREAT | O_EXCL | O_NOFOLLOW, mode);
409:system/core/sdcard/sdcard.c **** if (fd == -1) {
410:system/core/sdcard/sdcard.c **** if (errno == EEXIST) {
411:system/core/sdcard/sdcard.c **** return 0;
412:system/core/sdcard/sdcard.c **** } else {
413:system/core/sdcard/sdcard.c **** ERROR("Failed to open(%s): %s\n", path, strerror(errno));
414:system/core/sdcard/sdcard.c **** return -1;
415:system/core/sdcard/sdcard.c **** }
416:system/core/sdcard/sdcard.c **** }
417:system/core/sdcard/sdcard.c **** close(fd);
418:system/core/sdcard/sdcard.c **** return 0;
419:system/core/sdcard/sdcard.c **** }
420:system/core/sdcard/sdcard.c ****
421:system/core/sdcard/sdcard.c **** static void derive_permissions_locked(struct fuse* fuse, struct node *parent,
422:system/core/sdcard/sdcard.c **** struct node *node) {
423:system/core/sdcard/sdcard.c **** appid_t appid;
424:system/core/sdcard/sdcard.c ****
425:system/core/sdcard/sdcard.c **** /* By default, each node inherits from its parent */
426:system/core/sdcard/sdcard.c **** node->perm = PERM_INHERIT;
427:system/core/sdcard/sdcard.c **** node->userid = parent->userid;
428:system/core/sdcard/sdcard.c **** node->uid = parent->uid;
429:system/core/sdcard/sdcard.c **** node->gid = parent->gid;
430:system/core/sdcard/sdcard.c **** node->mode = parent->mode;
431:system/core/sdcard/sdcard.c ****
432:system/core/sdcard/sdcard.c **** if (fuse->derive == DERIVE_NONE) {
433:system/core/sdcard/sdcard.c **** return;
434:system/core/sdcard/sdcard.c **** }
435:system/core/sdcard/sdcard.c ****
436:system/core/sdcard/sdcard.c **** /* Derive custom permissions based on parent and current node */
437:system/core/sdcard/sdcard.c **** switch (parent->perm) {
438:system/core/sdcard/sdcard.c **** case PERM_INHERIT:
439:system/core/sdcard/sdcard.c **** /* Already inherited above */
440:system/core/sdcard/sdcard.c **** break;
441:system/core/sdcard/sdcard.c **** case PERM_LEGACY_PRE_ROOT:
442:system/core/sdcard/sdcard.c **** /* Legacy internal layout places users at top level */
443:system/core/sdcard/sdcard.c **** node->perm = PERM_ROOT;
444:system/core/sdcard/sdcard.c **** node->userid = strtoul(node->name, NULL, 10);
445:system/core/sdcard/sdcard.c **** break;
446:system/core/sdcard/sdcard.c **** case PERM_ROOT:
447:system/core/sdcard/sdcard.c **** /* Assume masked off by default. */
ARM GAS /tmp/cc3I8rcL.s page 10
448:system/core/sdcard/sdcard.c **** node->mode = 0770;
449:system/core/sdcard/sdcard.c **** if (!strcasecmp(node->name, "Android")) {
450:system/core/sdcard/sdcard.c **** /* App-specific directories inside; let anyone traverse */
451:system/core/sdcard/sdcard.c **** node->perm = PERM_ANDROID;
452:system/core/sdcard/sdcard.c **** node->mode = 0771;
453:system/core/sdcard/sdcard.c **** } else if (fuse->split_perms) {
454:system/core/sdcard/sdcard.c **** if (!strcasecmp(node->name, "DCIM")
455:system/core/sdcard/sdcard.c **** || !strcasecmp(node->name, "Pictures")) {
456:system/core/sdcard/sdcard.c **** node->gid = AID_SDCARD_PICS;
457:system/core/sdcard/sdcard.c **** } else if (!strcasecmp(node->name, "Alarms")
458:system/core/sdcard/sdcard.c **** || !strcasecmp(node->name, "Movies")
459:system/core/sdcard/sdcard.c **** || !strcasecmp(node->name, "Music")
460:system/core/sdcard/sdcard.c **** || !strcasecmp(node->name, "Notifications")
461:system/core/sdcard/sdcard.c **** || !strcasecmp(node->name, "Podcasts")
462:system/core/sdcard/sdcard.c **** || !strcasecmp(node->name, "Ringtones")) {
463:system/core/sdcard/sdcard.c **** node->gid = AID_SDCARD_AV;
464:system/core/sdcard/sdcard.c **** }
465:system/core/sdcard/sdcard.c **** }
466:system/core/sdcard/sdcard.c **** break;
467:system/core/sdcard/sdcard.c **** case PERM_ANDROID:
468:system/core/sdcard/sdcard.c **** if (!strcasecmp(node->name, "data")) {
469:system/core/sdcard/sdcard.c **** /* App-specific directories inside; let anyone traverse */
470:system/core/sdcard/sdcard.c **** node->perm = PERM_ANDROID_DATA;
471:system/core/sdcard/sdcard.c **** node->mode = 0771;
472:system/core/sdcard/sdcard.c **** } else if (!strcasecmp(node->name, "obb")) {
473:system/core/sdcard/sdcard.c **** /* App-specific directories inside; let anyone traverse */
474:system/core/sdcard/sdcard.c **** node->perm = PERM_ANDROID_OBB;
475:system/core/sdcard/sdcard.c **** node->mode = 0771;
476:system/core/sdcard/sdcard.c **** /* Single OBB directory is always shared */
477:system/core/sdcard/sdcard.c **** node->graft_path = fuse->obbpath;
478:system/core/sdcard/sdcard.c **** node->graft_pathlen = strlen(fuse->obbpath);
479:system/core/sdcard/sdcard.c **** } else if (!strcasecmp(node->name, "user")) {
480:system/core/sdcard/sdcard.c **** /* User directories must only be accessible to system, protected
481:system/core/sdcard/sdcard.c **** * by sdcard_all. Zygote will bind mount the appropriate user-
482:system/core/sdcard/sdcard.c **** * specific path. */
483:system/core/sdcard/sdcard.c **** node->perm = PERM_ANDROID_USER;
484:system/core/sdcard/sdcard.c **** node->gid = AID_SDCARD_ALL;
485:system/core/sdcard/sdcard.c **** node->mode = 0770;
486:system/core/sdcard/sdcard.c **** }
487:system/core/sdcard/sdcard.c **** break;
488:system/core/sdcard/sdcard.c **** case PERM_ANDROID_DATA:
489:system/core/sdcard/sdcard.c **** case PERM_ANDROID_OBB:
490:system/core/sdcard/sdcard.c **** appid = (appid_t) hashmapGet(fuse->package_to_appid, node->name);
491:system/core/sdcard/sdcard.c **** if (appid != 0) {
492:system/core/sdcard/sdcard.c **** node->uid = multiuser_get_uid(parent->userid, appid);
493:system/core/sdcard/sdcard.c **** }
494:system/core/sdcard/sdcard.c **** node->mode = 0770;
495:system/core/sdcard/sdcard.c **** break;
496:system/core/sdcard/sdcard.c **** case PERM_ANDROID_USER:
497:system/core/sdcard/sdcard.c **** /* Root of a secondary user */
498:system/core/sdcard/sdcard.c **** node->perm = PERM_ROOT;
499:system/core/sdcard/sdcard.c **** node->userid = strtoul(node->name, NULL, 10);
500:system/core/sdcard/sdcard.c **** node->gid = AID_SDCARD_R;
501:system/core/sdcard/sdcard.c **** node->mode = 0771;
502:system/core/sdcard/sdcard.c **** break;
503:system/core/sdcard/sdcard.c **** }
504:system/core/sdcard/sdcard.c **** }
ARM GAS /tmp/cc3I8rcL.s page 11
505:system/core/sdcard/sdcard.c ****
506:system/core/sdcard/sdcard.c **** /* Return if the calling UID holds sdcard_rw. */
507:system/core/sdcard/sdcard.c **** static bool get_caller_has_rw_locked(struct fuse* fuse, const struct fuse_in_header *hdr) {
508:system/core/sdcard/sdcard.c **** /* No additional permissions enforcement */
509:system/core/sdcard/sdcard.c **** if (fuse->derive == DERIVE_NONE) {
510:system/core/sdcard/sdcard.c **** return true;
511:system/core/sdcard/sdcard.c **** }
512:system/core/sdcard/sdcard.c ****
513:system/core/sdcard/sdcard.c **** appid_t appid = multiuser_get_app_id(hdr->uid);
514:system/core/sdcard/sdcard.c **** return hashmapContainsKey(fuse->appid_with_rw, (void*) appid);
515:system/core/sdcard/sdcard.c **** }
516:system/core/sdcard/sdcard.c ****
517:system/core/sdcard/sdcard.c **** /* Kernel has already enforced everything we returned through
518:system/core/sdcard/sdcard.c **** * derive_permissions_locked(), so this is used to lock down access
519:system/core/sdcard/sdcard.c **** * even further, such as enforcing that apps hold sdcard_rw. */
520:system/core/sdcard/sdcard.c **** static bool check_caller_access_to_name(struct fuse* fuse,
521:system/core/sdcard/sdcard.c **** const struct fuse_in_header *hdr, const struct node* parent_node,
522:system/core/sdcard/sdcard.c **** const char* name, int mode, bool has_rw) {
523:system/core/sdcard/sdcard.c **** /* Always block security-sensitive files at root */
524:system/core/sdcard/sdcard.c **** if (parent_node && parent_node->perm == PERM_ROOT) {
525:system/core/sdcard/sdcard.c **** if (!strcasecmp(name, "autorun.inf")
526:system/core/sdcard/sdcard.c **** || !strcasecmp(name, ".android_secure")
527:system/core/sdcard/sdcard.c **** || !strcasecmp(name, "android_secure")) {
528:system/core/sdcard/sdcard.c **** return false;
529:system/core/sdcard/sdcard.c **** }
530:system/core/sdcard/sdcard.c **** }
531:system/core/sdcard/sdcard.c ****
532:system/core/sdcard/sdcard.c **** /* No additional permissions enforcement */
533:system/core/sdcard/sdcard.c **** if (fuse->derive == DERIVE_NONE) {
534:system/core/sdcard/sdcard.c **** return true;
535:system/core/sdcard/sdcard.c **** }
536:system/core/sdcard/sdcard.c ****
537:system/core/sdcard/sdcard.c **** /* Root always has access; access for any other UIDs should always
538:system/core/sdcard/sdcard.c **** * be controlled through packages.list. */
539:system/core/sdcard/sdcard.c **** if (hdr->uid == 0) {
540:system/core/sdcard/sdcard.c **** return true;
541:system/core/sdcard/sdcard.c **** }
542:system/core/sdcard/sdcard.c ****
543:system/core/sdcard/sdcard.c **** /* If asking to write, verify that caller either owns the
544:system/core/sdcard/sdcard.c **** * parent or holds sdcard_rw. */
545:system/core/sdcard/sdcard.c **** if (mode & W_OK) {
546:system/core/sdcard/sdcard.c **** if (parent_node && hdr->uid == parent_node->uid) {
547:system/core/sdcard/sdcard.c **** return true;
548:system/core/sdcard/sdcard.c **** }
549:system/core/sdcard/sdcard.c ****
550:system/core/sdcard/sdcard.c **** return has_rw;
551:system/core/sdcard/sdcard.c **** }
552:system/core/sdcard/sdcard.c ****
553:system/core/sdcard/sdcard.c **** /* No extra permissions to enforce */
554:system/core/sdcard/sdcard.c **** return true;
555:system/core/sdcard/sdcard.c **** }
556:system/core/sdcard/sdcard.c ****
557:system/core/sdcard/sdcard.c **** static bool check_caller_access_to_node(struct fuse* fuse,
558:system/core/sdcard/sdcard.c **** const struct fuse_in_header *hdr, const struct node* node, int mode, bool has_rw) {
559:system/core/sdcard/sdcard.c **** return check_caller_access_to_name(fuse, hdr, node->parent, node->name, mode, has_rw);
560:system/core/sdcard/sdcard.c **** }
561:system/core/sdcard/sdcard.c ****
ARM GAS /tmp/cc3I8rcL.s page 12
562:system/core/sdcard/sdcard.c **** struct node *create_node_locked(struct fuse* fuse,
563:system/core/sdcard/sdcard.c **** struct node *parent, const char *name, const char* actual_name)
564:system/core/sdcard/sdcard.c **** {
565:system/core/sdcard/sdcard.c **** struct node *node;
566:system/core/sdcard/sdcard.c **** size_t namelen = strlen(name);
567:system/core/sdcard/sdcard.c ****
568:system/core/sdcard/sdcard.c **** node = calloc(1, sizeof(struct node));
569:system/core/sdcard/sdcard.c **** if (!node) {
570:system/core/sdcard/sdcard.c **** return NULL;
571:system/core/sdcard/sdcard.c **** }
572:system/core/sdcard/sdcard.c **** node->name = malloc(namelen + 1);
573:system/core/sdcard/sdcard.c **** if (!node->name) {
574:system/core/sdcard/sdcard.c **** free(node);
575:system/core/sdcard/sdcard.c **** return NULL;
576:system/core/sdcard/sdcard.c **** }
577:system/core/sdcard/sdcard.c **** memcpy(node->name, name, namelen + 1);
578:system/core/sdcard/sdcard.c **** if (strcmp(name, actual_name)) {
579:system/core/sdcard/sdcard.c **** node->actual_name = malloc(namelen + 1);
580:system/core/sdcard/sdcard.c **** if (!node->actual_name) {
581:system/core/sdcard/sdcard.c **** free(node->name);
582:system/core/sdcard/sdcard.c **** free(node);
583:system/core/sdcard/sdcard.c **** return NULL;
584:system/core/sdcard/sdcard.c **** }
585:system/core/sdcard/sdcard.c **** memcpy(node->actual_name, actual_name, namelen + 1);
586:system/core/sdcard/sdcard.c **** }
587:system/core/sdcard/sdcard.c **** node->namelen = namelen;
588:system/core/sdcard/sdcard.c **** node->nid = ptr_to_id(node);
589:system/core/sdcard/sdcard.c **** node->gen = fuse->next_generation++;
590:system/core/sdcard/sdcard.c ****
591:system/core/sdcard/sdcard.c **** derive_permissions_locked(fuse, parent, node);
592:system/core/sdcard/sdcard.c **** acquire_node_locked(node);
593:system/core/sdcard/sdcard.c **** add_node_to_parent_locked(node, parent);
594:system/core/sdcard/sdcard.c **** return node;
595:system/core/sdcard/sdcard.c **** }
596:system/core/sdcard/sdcard.c ****
597:system/core/sdcard/sdcard.c **** static int rename_node_locked(struct node *node, const char *name,
598:system/core/sdcard/sdcard.c **** const char* actual_name)
599:system/core/sdcard/sdcard.c **** {
600:system/core/sdcard/sdcard.c **** size_t namelen = strlen(name);
601:system/core/sdcard/sdcard.c **** int need_actual_name = strcmp(name, actual_name);
602:system/core/sdcard/sdcard.c ****
603:system/core/sdcard/sdcard.c **** /* make the storage bigger without actually changing the name
604:system/core/sdcard/sdcard.c **** * in case an error occurs part way */
605:system/core/sdcard/sdcard.c **** if (namelen > node->namelen) {
606:system/core/sdcard/sdcard.c **** char* new_name = realloc(node->name, namelen + 1);
607:system/core/sdcard/sdcard.c **** if (!new_name) {
608:system/core/sdcard/sdcard.c **** return -ENOMEM;
609:system/core/sdcard/sdcard.c **** }
610:system/core/sdcard/sdcard.c **** node->name = new_name;
611:system/core/sdcard/sdcard.c **** if (need_actual_name && node->actual_name) {
612:system/core/sdcard/sdcard.c **** char* new_actual_name = realloc(node->actual_name, namelen + 1);
613:system/core/sdcard/sdcard.c **** if (!new_actual_name) {
614:system/core/sdcard/sdcard.c **** return -ENOMEM;
615:system/core/sdcard/sdcard.c **** }
616:system/core/sdcard/sdcard.c **** node->actual_name = new_actual_name;
617:system/core/sdcard/sdcard.c **** }
618:system/core/sdcard/sdcard.c **** }
ARM GAS /tmp/cc3I8rcL.s page 13
619:system/core/sdcard/sdcard.c ****
620:system/core/sdcard/sdcard.c **** /* update the name, taking care to allocate storage before overwriting the old name */
621:system/core/sdcard/sdcard.c **** if (need_actual_name) {
622:system/core/sdcard/sdcard.c **** if (!node->actual_name) {
623:system/core/sdcard/sdcard.c **** node->actual_name = malloc(namelen + 1);
624:system/core/sdcard/sdcard.c **** if (!node->actual_name) {
625:system/core/sdcard/sdcard.c **** return -ENOMEM;
626:system/core/sdcard/sdcard.c **** }
627:system/core/sdcard/sdcard.c **** }
628:system/core/sdcard/sdcard.c **** memcpy(node->actual_name, actual_name, namelen + 1);
629:system/core/sdcard/sdcard.c **** } else {
630:system/core/sdcard/sdcard.c **** free(node->actual_name);
631:system/core/sdcard/sdcard.c **** node->actual_name = NULL;
632:system/core/sdcard/sdcard.c **** }
633:system/core/sdcard/sdcard.c **** memcpy(node->name, name, namelen + 1);
634:system/core/sdcard/sdcard.c **** node->namelen = namelen;
635:system/core/sdcard/sdcard.c **** return 0;
636:system/core/sdcard/sdcard.c **** }
637:system/core/sdcard/sdcard.c ****
638:system/core/sdcard/sdcard.c **** static struct node *lookup_node_by_id_locked(struct fuse *fuse, __u64 nid)
639:system/core/sdcard/sdcard.c **** {
640:system/core/sdcard/sdcard.c **** if (nid == FUSE_ROOT_ID) {
641:system/core/sdcard/sdcard.c **** return &fuse->root;
642:system/core/sdcard/sdcard.c **** } else {
643:system/core/sdcard/sdcard.c **** return id_to_ptr(nid);
644:system/core/sdcard/sdcard.c **** }
645:system/core/sdcard/sdcard.c **** }
646:system/core/sdcard/sdcard.c ****
647:system/core/sdcard/sdcard.c **** static struct node* lookup_node_and_path_by_id_locked(struct fuse* fuse, __u64 nid,
648:system/core/sdcard/sdcard.c **** char* buf, size_t bufsize)
649:system/core/sdcard/sdcard.c **** {
650:system/core/sdcard/sdcard.c **** struct node* node = lookup_node_by_id_locked(fuse, nid);
651:system/core/sdcard/sdcard.c **** if (node && get_node_path_locked(node, buf, bufsize) < 0) {
652:system/core/sdcard/sdcard.c **** node = NULL;
653:system/core/sdcard/sdcard.c **** }
654:system/core/sdcard/sdcard.c **** return node;
655:system/core/sdcard/sdcard.c **** }
656:system/core/sdcard/sdcard.c ****
657:system/core/sdcard/sdcard.c **** static struct node *lookup_child_by_name_locked(struct node *node, const char *name)
658:system/core/sdcard/sdcard.c **** {
659:system/core/sdcard/sdcard.c **** for (node = node->child; node; node = node->next) {
660:system/core/sdcard/sdcard.c **** /* use exact string comparison, nodes that differ by case
661:system/core/sdcard/sdcard.c **** * must be considered distinct even if they refer to the same
662:system/core/sdcard/sdcard.c **** * underlying file as otherwise operations such as "mv x x"
663:system/core/sdcard/sdcard.c **** * will not work because the source and target nodes are the same. */
664:system/core/sdcard/sdcard.c **** if (!strcmp(name, node->name)) {
665:system/core/sdcard/sdcard.c **** return node;
666:system/core/sdcard/sdcard.c **** }
667:system/core/sdcard/sdcard.c **** }
668:system/core/sdcard/sdcard.c **** return 0;
669:system/core/sdcard/sdcard.c **** }
670:system/core/sdcard/sdcard.c ****
671:system/core/sdcard/sdcard.c **** static struct node* acquire_or_create_child_locked(
672:system/core/sdcard/sdcard.c **** struct fuse* fuse, struct node* parent,
673:system/core/sdcard/sdcard.c **** const char* name, const char* actual_name)
674:system/core/sdcard/sdcard.c **** {
675:system/core/sdcard/sdcard.c **** struct node* child = lookup_child_by_name_locked(parent, name);
ARM GAS /tmp/cc3I8rcL.s page 14
676:system/core/sdcard/sdcard.c **** if (child) {
677:system/core/sdcard/sdcard.c **** acquire_node_locked(child);
678:system/core/sdcard/sdcard.c **** } else {
679:system/core/sdcard/sdcard.c **** child = create_node_locked(fuse, parent, name, actual_name);
680:system/core/sdcard/sdcard.c **** }
681:system/core/sdcard/sdcard.c **** return child;
682:system/core/sdcard/sdcard.c **** }
683:system/core/sdcard/sdcard.c ****
684:system/core/sdcard/sdcard.c **** static void fuse_init(struct fuse *fuse, int fd, const char *source_path,
685:system/core/sdcard/sdcard.c **** gid_t write_gid, derive_t derive, bool split_perms) {
686:system/core/sdcard/sdcard.c **** pthread_mutex_init(&fuse->lock, NULL);
687:system/core/sdcard/sdcard.c ****
688:system/core/sdcard/sdcard.c **** fuse->fd = fd;
689:system/core/sdcard/sdcard.c **** fuse->next_generation = 0;
690:system/core/sdcard/sdcard.c **** fuse->derive = derive;
691:system/core/sdcard/sdcard.c **** fuse->split_perms = split_perms;
692:system/core/sdcard/sdcard.c **** fuse->write_gid = write_gid;
693:system/core/sdcard/sdcard.c ****
694:system/core/sdcard/sdcard.c **** memset(&fuse->root, 0, sizeof(fuse->root));
695:system/core/sdcard/sdcard.c **** fuse->root.nid = FUSE_ROOT_ID; /* 1 */
696:system/core/sdcard/sdcard.c **** fuse->root.refcount = 2;
697:system/core/sdcard/sdcard.c **** fuse->root.namelen = strlen(source_path);
698:system/core/sdcard/sdcard.c **** fuse->root.name = strdup(source_path);
699:system/core/sdcard/sdcard.c **** fuse->root.userid = 0;
700:system/core/sdcard/sdcard.c **** fuse->root.uid = AID_ROOT;
701:system/core/sdcard/sdcard.c ****
702:system/core/sdcard/sdcard.c **** /* Set up root node for various modes of operation */
703:system/core/sdcard/sdcard.c **** switch (derive) {
704:system/core/sdcard/sdcard.c **** case DERIVE_NONE:
705:system/core/sdcard/sdcard.c **** /* Traditional behavior that treats entire device as being accessible
706:system/core/sdcard/sdcard.c **** * to sdcard_rw, and no permissions are derived. */
707:system/core/sdcard/sdcard.c **** fuse->root.perm = PERM_ROOT;
708:system/core/sdcard/sdcard.c **** fuse->root.mode = 0775;
709:system/core/sdcard/sdcard.c **** fuse->root.gid = AID_SDCARD_RW;
710:system/core/sdcard/sdcard.c **** break;
711:system/core/sdcard/sdcard.c **** case DERIVE_LEGACY:
712:system/core/sdcard/sdcard.c **** /* Legacy behavior used to support internal multiuser layout which
713:system/core/sdcard/sdcard.c **** * places user_id at the top directory level, with the actual roots
714:system/core/sdcard/sdcard.c **** * just below that. Shared OBB path is also at top level. */
715:system/core/sdcard/sdcard.c **** fuse->root.perm = PERM_LEGACY_PRE_ROOT;
716:system/core/sdcard/sdcard.c **** fuse->root.mode = 0771;
717:system/core/sdcard/sdcard.c **** fuse->root.gid = AID_SDCARD_R;
718:system/core/sdcard/sdcard.c **** fuse->package_to_appid = hashmapCreate(256, str_hash, str_icase_equals);
719:system/core/sdcard/sdcard.c **** fuse->appid_with_rw = hashmapCreate(128, int_hash, int_equals);
720:system/core/sdcard/sdcard.c **** snprintf(fuse->obbpath, sizeof(fuse->obbpath), "%s/obb", source_path);
721:system/core/sdcard/sdcard.c **** fs_prepare_dir(fuse->obbpath, 0775, getuid(), getgid());
722:system/core/sdcard/sdcard.c **** break;
723:system/core/sdcard/sdcard.c **** case DERIVE_UNIFIED:
724:system/core/sdcard/sdcard.c **** /* Unified multiuser layout which places secondary user_id under
725:system/core/sdcard/sdcard.c **** * /Android/user and shared OBB path under /Android/obb. */
726:system/core/sdcard/sdcard.c **** fuse->root.perm = PERM_ROOT;
727:system/core/sdcard/sdcard.c **** fuse->root.mode = 0771;
728:system/core/sdcard/sdcard.c **** fuse->root.gid = AID_SDCARD_R;
729:system/core/sdcard/sdcard.c **** fuse->package_to_appid = hashmapCreate(256, str_hash, str_icase_equals);
730:system/core/sdcard/sdcard.c **** fuse->appid_with_rw = hashmapCreate(128, int_hash, int_equals);
731:system/core/sdcard/sdcard.c **** snprintf(fuse->obbpath, sizeof(fuse->obbpath), "%s/Android/obb", source_path);
732:system/core/sdcard/sdcard.c **** break;
ARM GAS /tmp/cc3I8rcL.s page 15
733:system/core/sdcard/sdcard.c **** }
734:system/core/sdcard/sdcard.c **** }
735:system/core/sdcard/sdcard.c ****
736:system/core/sdcard/sdcard.c **** static void fuse_status(struct fuse *fuse, __u64 unique, int err)
737:system/core/sdcard/sdcard.c **** {
738:system/core/sdcard/sdcard.c **** struct fuse_out_header hdr;
739:system/core/sdcard/sdcard.c **** hdr.len = sizeof(hdr);
740:system/core/sdcard/sdcard.c **** hdr.error = err;
741:system/core/sdcard/sdcard.c **** hdr.unique = unique;
742:system/core/sdcard/sdcard.c **** write(fuse->fd, &hdr, sizeof(hdr));
743:system/core/sdcard/sdcard.c **** }
744:system/core/sdcard/sdcard.c ****
745:system/core/sdcard/sdcard.c **** static void fuse_reply(struct fuse *fuse, __u64 unique, void *data, int len)
746:system/core/sdcard/sdcard.c **** {
747:system/core/sdcard/sdcard.c **** struct fuse_out_header hdr;
748:system/core/sdcard/sdcard.c **** struct iovec vec[2];
749:system/core/sdcard/sdcard.c **** int res;
750:system/core/sdcard/sdcard.c ****
751:system/core/sdcard/sdcard.c **** hdr.len = len + sizeof(hdr);
752:system/core/sdcard/sdcard.c **** hdr.error = 0;
753:system/core/sdcard/sdcard.c **** hdr.unique = unique;
754:system/core/sdcard/sdcard.c ****
755:system/core/sdcard/sdcard.c **** vec[0].iov_base = &hdr;
756:system/core/sdcard/sdcard.c **** vec[0].iov_len = sizeof(hdr);
757:system/core/sdcard/sdcard.c **** vec[1].iov_base = data;
758:system/core/sdcard/sdcard.c **** vec[1].iov_len = len;
759:system/core/sdcard/sdcard.c ****
760:system/core/sdcard/sdcard.c **** res = writev(fuse->fd, vec, 2);
761:system/core/sdcard/sdcard.c **** if (res < 0) {
762:system/core/sdcard/sdcard.c **** ERROR("*** REPLY FAILED *** %d\n", errno);
763:system/core/sdcard/sdcard.c **** }
764:system/core/sdcard/sdcard.c **** }
765:system/core/sdcard/sdcard.c ****
766:system/core/sdcard/sdcard.c **** static int fuse_reply_entry(struct fuse* fuse, __u64 unique,
767:system/core/sdcard/sdcard.c **** struct node* parent, const char* name, const char* actual_name,
768:system/core/sdcard/sdcard.c **** const char* path)
769:system/core/sdcard/sdcard.c **** {
770:system/core/sdcard/sdcard.c **** struct node* node;
771:system/core/sdcard/sdcard.c **** struct fuse_entry_out out;
772:system/core/sdcard/sdcard.c **** struct stat s;
773:system/core/sdcard/sdcard.c ****
774:system/core/sdcard/sdcard.c **** if (lstat(path, &s) < 0) {
775:system/core/sdcard/sdcard.c **** return -errno;
776:system/core/sdcard/sdcard.c **** }
777:system/core/sdcard/sdcard.c ****
778:system/core/sdcard/sdcard.c **** pthread_mutex_lock(&fuse->lock);
779:system/core/sdcard/sdcard.c **** node = acquire_or_create_child_locked(fuse, parent, name, actual_name);
780:system/core/sdcard/sdcard.c **** if (!node) {
781:system/core/sdcard/sdcard.c **** pthread_mutex_unlock(&fuse->lock);
782:system/core/sdcard/sdcard.c **** return -ENOMEM;
783:system/core/sdcard/sdcard.c **** }
784:system/core/sdcard/sdcard.c **** memset(&out, 0, sizeof(out));
785:system/core/sdcard/sdcard.c **** attr_from_stat(&out.attr, &s, node);
786:system/core/sdcard/sdcard.c **** out.attr_valid = 10;
787:system/core/sdcard/sdcard.c **** out.entry_valid = 10;
788:system/core/sdcard/sdcard.c **** out.nodeid = node->nid;
789:system/core/sdcard/sdcard.c **** out.generation = node->gen;
ARM GAS /tmp/cc3I8rcL.s page 16
790:system/core/sdcard/sdcard.c **** pthread_mutex_unlock(&fuse->lock);
791:system/core/sdcard/sdcard.c **** fuse_reply(fuse, unique, &out, sizeof(out));
792:system/core/sdcard/sdcard.c **** return NO_STATUS;
793:system/core/sdcard/sdcard.c **** }
794:system/core/sdcard/sdcard.c ****
795:system/core/sdcard/sdcard.c **** static int fuse_reply_attr(struct fuse* fuse, __u64 unique, const struct node* node,
796:system/core/sdcard/sdcard.c **** const char* path)
797:system/core/sdcard/sdcard.c **** {
798:system/core/sdcard/sdcard.c **** struct fuse_attr_out out;
799:system/core/sdcard/sdcard.c **** struct stat s;
800:system/core/sdcard/sdcard.c ****
801:system/core/sdcard/sdcard.c **** if (lstat(path, &s) < 0) {
802:system/core/sdcard/sdcard.c **** return -errno;
803:system/core/sdcard/sdcard.c **** }
804:system/core/sdcard/sdcard.c **** memset(&out, 0, sizeof(out));
805:system/core/sdcard/sdcard.c **** attr_from_stat(&out.attr, &s, node);
806:system/core/sdcard/sdcard.c **** out.attr_valid = 10;
807:system/core/sdcard/sdcard.c **** fuse_reply(fuse, unique, &out, sizeof(out));
808:system/core/sdcard/sdcard.c **** return NO_STATUS;
809:system/core/sdcard/sdcard.c **** }
810:system/core/sdcard/sdcard.c ****
811:system/core/sdcard/sdcard.c **** static int handle_lookup(struct fuse* fuse, struct fuse_handler* handler,
812:system/core/sdcard/sdcard.c **** const struct fuse_in_header *hdr, const char* name)
813:system/core/sdcard/sdcard.c **** {
814:system/core/sdcard/sdcard.c **** struct node* parent_node;
815:system/core/sdcard/sdcard.c **** char parent_path[PATH_MAX];
816:system/core/sdcard/sdcard.c **** char child_path[PATH_MAX];
817:system/core/sdcard/sdcard.c **** const char* actual_name;
818:system/core/sdcard/sdcard.c ****
819:system/core/sdcard/sdcard.c **** pthread_mutex_lock(&fuse->lock);
820:system/core/sdcard/sdcard.c **** parent_node = lookup_node_and_path_by_id_locked(fuse, hdr->nodeid,
821:system/core/sdcard/sdcard.c **** parent_path, sizeof(parent_path));
822:system/core/sdcard/sdcard.c **** TRACE("[%d] LOOKUP %s @ %llx (%s)\n", handler->token, name, hdr->nodeid,
823:system/core/sdcard/sdcard.c **** parent_node ? parent_node->name : "?");
824:system/core/sdcard/sdcard.c **** pthread_mutex_unlock(&fuse->lock);
825:system/core/sdcard/sdcard.c ****
826:system/core/sdcard/sdcard.c **** if (!parent_node || !(actual_name = find_file_within(parent_path, name,
827:system/core/sdcard/sdcard.c **** child_path, sizeof(child_path), 1))) {
828:system/core/sdcard/sdcard.c **** return -ENOENT;
829:system/core/sdcard/sdcard.c **** }
830:system/core/sdcard/sdcard.c **** if (!check_caller_access_to_name(fuse, hdr, parent_node, name, R_OK, false)) {
831:system/core/sdcard/sdcard.c **** return -EACCES;
832:system/core/sdcard/sdcard.c **** }
833:system/core/sdcard/sdcard.c ****
834:system/core/sdcard/sdcard.c **** return fuse_reply_entry(fuse, hdr->unique, parent_node, name, actual_name, child_path);
835:system/core/sdcard/sdcard.c **** }
836:system/core/sdcard/sdcard.c ****
837:system/core/sdcard/sdcard.c **** static int handle_forget(struct fuse* fuse, struct fuse_handler* handler,
838:system/core/sdcard/sdcard.c **** const struct fuse_in_header *hdr, const struct fuse_forget_in *req)
839:system/core/sdcard/sdcard.c **** {
840:system/core/sdcard/sdcard.c **** struct node* node;
841:system/core/sdcard/sdcard.c ****
842:system/core/sdcard/sdcard.c **** pthread_mutex_lock(&fuse->lock);
843:system/core/sdcard/sdcard.c **** node = lookup_node_by_id_locked(fuse, hdr->nodeid);
844:system/core/sdcard/sdcard.c **** TRACE("[%d] FORGET #%lld @ %llx (%s)\n", handler->token, req->nlookup,
845:system/core/sdcard/sdcard.c **** hdr->nodeid, node ? node->name : "?");
846:system/core/sdcard/sdcard.c **** if (node) {
ARM GAS /tmp/cc3I8rcL.s page 17
847:system/core/sdcard/sdcard.c **** __u64 n = req->nlookup;
848:system/core/sdcard/sdcard.c **** while (n--) {
849:system/core/sdcard/sdcard.c **** release_node_locked(node);
850:system/core/sdcard/sdcard.c **** }
851:system/core/sdcard/sdcard.c **** }
852:system/core/sdcard/sdcard.c **** pthread_mutex_unlock(&fuse->lock);
853:system/core/sdcard/sdcard.c **** return NO_STATUS; /* no reply */
854:system/core/sdcard/sdcard.c **** }
855:system/core/sdcard/sdcard.c ****
856:system/core/sdcard/sdcard.c **** static int handle_getattr(struct fuse* fuse, struct fuse_handler* handler,
857:system/core/sdcard/sdcard.c **** const struct fuse_in_header *hdr, const struct fuse_getattr_in *req)
858:system/core/sdcard/sdcard.c **** {
859:system/core/sdcard/sdcard.c **** struct node* node;
860:system/core/sdcard/sdcard.c **** char path[PATH_MAX];
861:system/core/sdcard/sdcard.c ****
862:system/core/sdcard/sdcard.c **** pthread_mutex_lock(&fuse->lock);
863:system/core/sdcard/sdcard.c **** node = lookup_node_and_path_by_id_locked(fuse, hdr->nodeid, path, sizeof(path));
864:system/core/sdcard/sdcard.c **** TRACE("[%d] GETATTR flags=%x fh=%llx @ %llx (%s)\n", handler->token,
865:system/core/sdcard/sdcard.c **** req->getattr_flags, req->fh, hdr->nodeid, node ? node->name : "?");
866:system/core/sdcard/sdcard.c **** pthread_mutex_unlock(&fuse->lock);
867:system/core/sdcard/sdcard.c ****
868:system/core/sdcard/sdcard.c **** if (!node) {
869:system/core/sdcard/sdcard.c **** return -ENOENT;
870:system/core/sdcard/sdcard.c **** }
871:system/core/sdcard/sdcard.c **** if (!check_caller_access_to_node(fuse, hdr, node, R_OK, false)) {
872:system/core/sdcard/sdcard.c **** return -EACCES;
873:system/core/sdcard/sdcard.c **** }
874:system/core/sdcard/sdcard.c ****
875:system/core/sdcard/sdcard.c **** return fuse_reply_attr(fuse, hdr->unique, node, path);
876:system/core/sdcard/sdcard.c **** }
877:system/core/sdcard/sdcard.c ****
878:system/core/sdcard/sdcard.c **** static int handle_setattr(struct fuse* fuse, struct fuse_handler* handler,
879:system/core/sdcard/sdcard.c **** const struct fuse_in_header *hdr, const struct fuse_setattr_in *req)
880:system/core/sdcard/sdcard.c **** {
881:system/core/sdcard/sdcard.c **** bool has_rw;
882:system/core/sdcard/sdcard.c **** struct node* node;
883:system/core/sdcard/sdcard.c **** char path[PATH_MAX];
884:system/core/sdcard/sdcard.c **** struct timespec times[2];
885:system/core/sdcard/sdcard.c ****
886:system/core/sdcard/sdcard.c **** pthread_mutex_lock(&fuse->lock);
887:system/core/sdcard/sdcard.c **** has_rw = get_caller_has_rw_locked(fuse, hdr);
888:system/core/sdcard/sdcard.c **** node = lookup_node_and_path_by_id_locked(fuse, hdr->nodeid, path, sizeof(path));
889:system/core/sdcard/sdcard.c **** TRACE("[%d] SETATTR fh=%llx valid=%x @ %llx (%s)\n", handler->token,
890:system/core/sdcard/sdcard.c **** req->fh, req->valid, hdr->nodeid, node ? node->name : "?");
891:system/core/sdcard/sdcard.c **** pthread_mutex_unlock(&fuse->lock);
892:system/core/sdcard/sdcard.c ****
893:system/core/sdcard/sdcard.c **** if (!node) {
894:system/core/sdcard/sdcard.c **** return -ENOENT;
895:system/core/sdcard/sdcard.c **** }
896:system/core/sdcard/sdcard.c **** if (!check_caller_access_to_node(fuse, hdr, node, W_OK, has_rw)) {
897:system/core/sdcard/sdcard.c **** return -EACCES;
898:system/core/sdcard/sdcard.c **** }
899:system/core/sdcard/sdcard.c ****
900:system/core/sdcard/sdcard.c **** /* XXX: incomplete implementation on purpose.
901:system/core/sdcard/sdcard.c **** * chmod/chown should NEVER be implemented.*/
902:system/core/sdcard/sdcard.c ****
903:system/core/sdcard/sdcard.c **** if ((req->valid & FATTR_SIZE) && truncate(path, req->size) < 0) {
ARM GAS /tmp/cc3I8rcL.s page 18
904:system/core/sdcard/sdcard.c **** return -errno;
905:system/core/sdcard/sdcard.c **** }
906:system/core/sdcard/sdcard.c ****
907:system/core/sdcard/sdcard.c **** /* Handle changing atime and mtime. If FATTR_ATIME_and FATTR_ATIME_NOW
908:system/core/sdcard/sdcard.c **** * are both set, then set it to the current time. Else, set it to the
909:system/core/sdcard/sdcard.c **** * time specified in the request. Same goes for mtime. Use utimensat(2)
910:system/core/sdcard/sdcard.c **** * as it allows ATIME and MTIME to be changed independently, and has
911:system/core/sdcard/sdcard.c **** * nanosecond resolution which fuse also has.
912:system/core/sdcard/sdcard.c **** */
913:system/core/sdcard/sdcard.c **** if (req->valid & (FATTR_ATIME | FATTR_MTIME)) {
914:system/core/sdcard/sdcard.c **** times[0].tv_nsec = UTIME_OMIT;
915:system/core/sdcard/sdcard.c **** times[1].tv_nsec = UTIME_OMIT;
916:system/core/sdcard/sdcard.c **** if (req->valid & FATTR_ATIME) {
917:system/core/sdcard/sdcard.c **** if (req->valid & FATTR_ATIME_NOW) {
918:system/core/sdcard/sdcard.c **** times[0].tv_nsec = UTIME_NOW;
919:system/core/sdcard/sdcard.c **** } else {
920:system/core/sdcard/sdcard.c **** times[0].tv_sec = req->atime;
921:system/core/sdcard/sdcard.c **** times[0].tv_nsec = req->atimensec;
922:system/core/sdcard/sdcard.c **** }
923:system/core/sdcard/sdcard.c **** }
924:system/core/sdcard/sdcard.c **** if (req->valid & FATTR_MTIME) {
925:system/core/sdcard/sdcard.c **** if (req->valid & FATTR_MTIME_NOW) {
926:system/core/sdcard/sdcard.c **** times[1].tv_nsec = UTIME_NOW;
927:system/core/sdcard/sdcard.c **** } else {
928:system/core/sdcard/sdcard.c **** times[1].tv_sec = req->mtime;
929:system/core/sdcard/sdcard.c **** times[1].tv_nsec = req->mtimensec;
930:system/core/sdcard/sdcard.c **** }
931:system/core/sdcard/sdcard.c **** }
932:system/core/sdcard/sdcard.c **** TRACE("[%d] Calling utimensat on %s with atime %ld, mtime=%ld\n",
933:system/core/sdcard/sdcard.c **** handler->token, path, times[0].tv_sec, times[1].tv_sec);
934:system/core/sdcard/sdcard.c **** if (utimensat(-1, path, times, 0) < 0) {
935:system/core/sdcard/sdcard.c **** return -errno;
936:system/core/sdcard/sdcard.c **** }
937:system/core/sdcard/sdcard.c **** }
938:system/core/sdcard/sdcard.c **** return fuse_reply_attr(fuse, hdr->unique, node, path);
939:system/core/sdcard/sdcard.c **** }
940:system/core/sdcard/sdcard.c ****
941:system/core/sdcard/sdcard.c **** static int handle_mknod(struct fuse* fuse, struct fuse_handler* handler,
942:system/core/sdcard/sdcard.c **** const struct fuse_in_header* hdr, const struct fuse_mknod_in* req, const char* name)
943:system/core/sdcard/sdcard.c **** {
944:system/core/sdcard/sdcard.c **** bool has_rw;
945:system/core/sdcard/sdcard.c **** struct node* parent_node;
946:system/core/sdcard/sdcard.c **** char parent_path[PATH_MAX];
947:system/core/sdcard/sdcard.c **** char child_path[PATH_MAX];
948:system/core/sdcard/sdcard.c **** const char* actual_name;
949:system/core/sdcard/sdcard.c ****
950:system/core/sdcard/sdcard.c **** pthread_mutex_lock(&fuse->lock);
951:system/core/sdcard/sdcard.c **** has_rw = get_caller_has_rw_locked(fuse, hdr);
952:system/core/sdcard/sdcard.c **** parent_node = lookup_node_and_path_by_id_locked(fuse, hdr->nodeid,
953:system/core/sdcard/sdcard.c **** parent_path, sizeof(parent_path));
954:system/core/sdcard/sdcard.c **** TRACE("[%d] MKNOD %s 0%o @ %llx (%s)\n", handler->token,
955:system/core/sdcard/sdcard.c **** name, req->mode, hdr->nodeid, parent_node ? parent_node->name : "?");
956:system/core/sdcard/sdcard.c **** pthread_mutex_unlock(&fuse->lock);
957:system/core/sdcard/sdcard.c ****
958:system/core/sdcard/sdcard.c **** if (!parent_node || !(actual_name = find_file_within(parent_path, name,
959:system/core/sdcard/sdcard.c **** child_path, sizeof(child_path), 1))) {
960:system/core/sdcard/sdcard.c **** return -ENOENT;
ARM GAS /tmp/cc3I8rcL.s page 19
961:system/core/sdcard/sdcard.c **** }
962:system/core/sdcard/sdcard.c **** if (!check_caller_access_to_name(fuse, hdr, parent_node, name, W_OK, has_rw)) {
963:system/core/sdcard/sdcard.c **** return -EACCES;
964:system/core/sdcard/sdcard.c **** }
965:system/core/sdcard/sdcard.c **** __u32 mode = (req->mode & (~0777)) | 0664;
966:system/core/sdcard/sdcard.c **** if (mknod(child_path, mode, req->rdev) < 0) {
967:system/core/sdcard/sdcard.c **** return -errno;
968:system/core/sdcard/sdcard.c **** }
969:system/core/sdcard/sdcard.c **** return fuse_reply_entry(fuse, hdr->unique, parent_node, name, actual_name, child_path);
970:system/core/sdcard/sdcard.c **** }
971:system/core/sdcard/sdcard.c ****
972:system/core/sdcard/sdcard.c **** static int handle_mkdir(struct fuse* fuse, struct fuse_handler* handler,
973:system/core/sdcard/sdcard.c **** const struct fuse_in_header* hdr, const struct fuse_mkdir_in* req, const char* name)
974:system/core/sdcard/sdcard.c **** {
975:system/core/sdcard/sdcard.c **** bool has_rw;
976:system/core/sdcard/sdcard.c **** struct node* parent_node;
977:system/core/sdcard/sdcard.c **** char parent_path[PATH_MAX];
978:system/core/sdcard/sdcard.c **** char child_path[PATH_MAX];
979:system/core/sdcard/sdcard.c **** const char* actual_name;
980:system/core/sdcard/sdcard.c ****
981:system/core/sdcard/sdcard.c **** pthread_mutex_lock(&fuse->lock);
982:system/core/sdcard/sdcard.c **** has_rw = get_caller_has_rw_locked(fuse, hdr);
983:system/core/sdcard/sdcard.c **** parent_node = lookup_node_and_path_by_id_locked(fuse, hdr->nodeid,
984:system/core/sdcard/sdcard.c **** parent_path, sizeof(parent_path));
985:system/core/sdcard/sdcard.c **** TRACE("[%d] MKDIR %s 0%o @ %llx (%s)\n", handler->token,
986:system/core/sdcard/sdcard.c **** name, req->mode, hdr->nodeid, parent_node ? parent_node->name : "?");
987:system/core/sdcard/sdcard.c **** pthread_mutex_unlock(&fuse->lock);
988:system/core/sdcard/sdcard.c ****
989:system/core/sdcard/sdcard.c **** if (!parent_node || !(actual_name = find_file_within(parent_path, name,
990:system/core/sdcard/sdcard.c **** child_path, sizeof(child_path), 1))) {
991:system/core/sdcard/sdcard.c **** return -ENOENT;
992:system/core/sdcard/sdcard.c **** }
993:system/core/sdcard/sdcard.c **** if (!check_caller_access_to_name(fuse, hdr, parent_node, name, W_OK, has_rw)) {
994:system/core/sdcard/sdcard.c **** return -EACCES;
995:system/core/sdcard/sdcard.c **** }
996:system/core/sdcard/sdcard.c **** __u32 mode = (req->mode & (~0777)) | 0775;
997:system/core/sdcard/sdcard.c **** if (mkdir(child_path, mode) < 0) {
998:system/core/sdcard/sdcard.c **** return -errno;
999:system/core/sdcard/sdcard.c **** }
1000:system/core/sdcard/sdcard.c ****
1001:system/core/sdcard/sdcard.c **** /* When creating /Android/data and /Android/obb, mark them as .nomedia */
1002:system/core/sdcard/sdcard.c **** if (parent_node->perm == PERM_ANDROID && !strcasecmp(name, "data")) {
1003:system/core/sdcard/sdcard.c **** char nomedia[PATH_MAX];
1004:system/core/sdcard/sdcard.c **** snprintf(nomedia, PATH_MAX, "%s/.nomedia", child_path);
1005:system/core/sdcard/sdcard.c **** if (touch(nomedia, 0664) != 0) {
1006:system/core/sdcard/sdcard.c **** ERROR("Failed to touch(%s): %s\n", nomedia, strerror(errno));
1007:system/core/sdcard/sdcard.c **** return -ENOENT;
1008:system/core/sdcard/sdcard.c **** }
1009:system/core/sdcard/sdcard.c **** }
1010:system/core/sdcard/sdcard.c **** if (parent_node->perm == PERM_ANDROID && !strcasecmp(name, "obb")) {
1011:system/core/sdcard/sdcard.c **** char nomedia[PATH_MAX];
1012:system/core/sdcard/sdcard.c **** snprintf(nomedia, PATH_MAX, "%s/.nomedia", fuse->obbpath);
1013:system/core/sdcard/sdcard.c **** if (touch(nomedia, 0664) != 0) {
1014:system/core/sdcard/sdcard.c **** ERROR("Failed to touch(%s): %s\n", nomedia, strerror(errno));
1015:system/core/sdcard/sdcard.c **** return -ENOENT;
1016:system/core/sdcard/sdcard.c **** }
1017:system/core/sdcard/sdcard.c **** }
ARM GAS /tmp/cc3I8rcL.s page 20
1018:system/core/sdcard/sdcard.c ****
1019:system/core/sdcard/sdcard.c **** return fuse_reply_entry(fuse, hdr->unique, parent_node, name, actual_name, child_path);
1020:system/core/sdcard/sdcard.c **** }
1021:system/core/sdcard/sdcard.c ****
1022:system/core/sdcard/sdcard.c **** static int handle_unlink(struct fuse* fuse, struct fuse_handler* handler,
1023:system/core/sdcard/sdcard.c **** const struct fuse_in_header* hdr, const char* name)
1024:system/core/sdcard/sdcard.c **** {
1025:system/core/sdcard/sdcard.c **** bool has_rw;
1026:system/core/sdcard/sdcard.c **** struct node* parent_node;
1027:system/core/sdcard/sdcard.c **** char parent_path[PATH_MAX];
1028:system/core/sdcard/sdcard.c **** char child_path[PATH_MAX];
1029:system/core/sdcard/sdcard.c ****
1030:system/core/sdcard/sdcard.c **** pthread_mutex_lock(&fuse->lock);
1031:system/core/sdcard/sdcard.c **** has_rw = get_caller_has_rw_locked(fuse, hdr);
1032:system/core/sdcard/sdcard.c **** parent_node = lookup_node_and_path_by_id_locked(fuse, hdr->nodeid,
1033:system/core/sdcard/sdcard.c **** parent_path, sizeof(parent_path));
1034:system/core/sdcard/sdcard.c **** TRACE("[%d] UNLINK %s @ %llx (%s)\n", handler->token,
1035:system/core/sdcard/sdcard.c **** name, hdr->nodeid, parent_node ? parent_node->name : "?");
1036:system/core/sdcard/sdcard.c **** pthread_mutex_unlock(&fuse->lock);
1037:system/core/sdcard/sdcard.c ****
1038:system/core/sdcard/sdcard.c **** if (!parent_node || !find_file_within(parent_path, name,
1039:system/core/sdcard/sdcard.c **** child_path, sizeof(child_path), 1)) {
1040:system/core/sdcard/sdcard.c **** return -ENOENT;
1041:system/core/sdcard/sdcard.c **** }
1042:system/core/sdcard/sdcard.c **** if (!check_caller_access_to_name(fuse, hdr, parent_node, name, W_OK, has_rw)) {
1043:system/core/sdcard/sdcard.c **** return -EACCES;
1044:system/core/sdcard/sdcard.c **** }
1045:system/core/sdcard/sdcard.c **** if (unlink(child_path) < 0) {
1046:system/core/sdcard/sdcard.c **** return -errno;
1047:system/core/sdcard/sdcard.c **** }
1048:system/core/sdcard/sdcard.c **** return 0;
1049:system/core/sdcard/sdcard.c **** }
1050:system/core/sdcard/sdcard.c ****
1051:system/core/sdcard/sdcard.c **** static int handle_rmdir(struct fuse* fuse, struct fuse_handler* handler,
1052:system/core/sdcard/sdcard.c **** const struct fuse_in_header* hdr, const char* name)
1053:system/core/sdcard/sdcard.c **** {
1054:system/core/sdcard/sdcard.c **** bool has_rw;
1055:system/core/sdcard/sdcard.c **** struct node* parent_node;
1056:system/core/sdcard/sdcard.c **** char parent_path[PATH_MAX];
1057:system/core/sdcard/sdcard.c **** char child_path[PATH_MAX];
1058:system/core/sdcard/sdcard.c ****
1059:system/core/sdcard/sdcard.c **** pthread_mutex_lock(&fuse->lock);
1060:system/core/sdcard/sdcard.c **** has_rw = get_caller_has_rw_locked(fuse, hdr);
1061:system/core/sdcard/sdcard.c **** parent_node = lookup_node_and_path_by_id_locked(fuse, hdr->nodeid,
1062:system/core/sdcard/sdcard.c **** parent_path, sizeof(parent_path));
1063:system/core/sdcard/sdcard.c **** TRACE("[%d] RMDIR %s @ %llx (%s)\n", handler->token,
1064:system/core/sdcard/sdcard.c **** name, hdr->nodeid, parent_node ? parent_node->name : "?");
1065:system/core/sdcard/sdcard.c **** pthread_mutex_unlock(&fuse->lock);
1066:system/core/sdcard/sdcard.c ****
1067:system/core/sdcard/sdcard.c **** if (!parent_node || !find_file_within(parent_path, name,
1068:system/core/sdcard/sdcard.c **** child_path, sizeof(child_path), 1)) {
1069:system/core/sdcard/sdcard.c **** return -ENOENT;
1070:system/core/sdcard/sdcard.c **** }
1071:system/core/sdcard/sdcard.c **** if (!check_caller_access_to_name(fuse, hdr, parent_node, name, W_OK, has_rw)) {
1072:system/core/sdcard/sdcard.c **** return -EACCES;
1073:system/core/sdcard/sdcard.c **** }
1074:system/core/sdcard/sdcard.c **** if (rmdir(child_path) < 0) {
ARM GAS /tmp/cc3I8rcL.s page 21
1075:system/core/sdcard/sdcard.c **** return -errno;
1076:system/core/sdcard/sdcard.c **** }
1077:system/core/sdcard/sdcard.c **** return 0;
1078:system/core/sdcard/sdcard.c **** }
1079:system/core/sdcard/sdcard.c ****
1080:system/core/sdcard/sdcard.c **** static int handle_rename(struct fuse* fuse, struct fuse_handler* handler,
1081:system/core/sdcard/sdcard.c **** const struct fuse_in_header* hdr, const struct fuse_rename_in* req,
1082:system/core/sdcard/sdcard.c **** const char* old_name, const char* new_name)
1083:system/core/sdcard/sdcard.c **** {
1084:system/core/sdcard/sdcard.c **** bool has_rw;
1085:system/core/sdcard/sdcard.c **** struct node* old_parent_node;
1086:system/core/sdcard/sdcard.c **** struct node* new_parent_node;
1087:system/core/sdcard/sdcard.c **** struct node* child_node;
1088:system/core/sdcard/sdcard.c **** char old_parent_path[PATH_MAX];
1089:system/core/sdcard/sdcard.c **** char new_parent_path[PATH_MAX];
1090:system/core/sdcard/sdcard.c **** char old_child_path[PATH_MAX];
1091:system/core/sdcard/sdcard.c **** char new_child_path[PATH_MAX];
1092:system/core/sdcard/sdcard.c **** const char* new_actual_name;
1093:system/core/sdcard/sdcard.c **** int res;
1094:system/core/sdcard/sdcard.c ****
1095:system/core/sdcard/sdcard.c **** pthread_mutex_lock(&fuse->lock);
1096:system/core/sdcard/sdcard.c **** has_rw = get_caller_has_rw_locked(fuse, hdr);
1097:system/core/sdcard/sdcard.c **** old_parent_node = lookup_node_and_path_by_id_locked(fuse, hdr->nodeid,
1098:system/core/sdcard/sdcard.c **** old_parent_path, sizeof(old_parent_path));
1099:system/core/sdcard/sdcard.c **** new_parent_node = lookup_node_and_path_by_id_locked(fuse, req->newdir,
1100:system/core/sdcard/sdcard.c **** new_parent_path, sizeof(new_parent_path));
1101:system/core/sdcard/sdcard.c **** TRACE("[%d] RENAME %s->%s @ %llx (%s) -> %llx (%s)\n", handler->token,
1102:system/core/sdcard/sdcard.c **** old_name, new_name,
1103:system/core/sdcard/sdcard.c **** hdr->nodeid, old_parent_node ? old_parent_node->name : "?",
1104:system/core/sdcard/sdcard.c **** req->newdir, new_parent_node ? new_parent_node->name : "?");
1105:system/core/sdcard/sdcard.c **** if (!old_parent_node || !new_parent_node) {
1106:system/core/sdcard/sdcard.c **** res = -ENOENT;
1107:system/core/sdcard/sdcard.c **** goto lookup_error;
1108:system/core/sdcard/sdcard.c **** }
1109:system/core/sdcard/sdcard.c **** if (!check_caller_access_to_name(fuse, hdr, old_parent_node, old_name, W_OK, has_rw)) {
1110:system/core/sdcard/sdcard.c **** res = -EACCES;
1111:system/core/sdcard/sdcard.c **** goto lookup_error;
1112:system/core/sdcard/sdcard.c **** }
1113:system/core/sdcard/sdcard.c **** if (!check_caller_access_to_name(fuse, hdr, new_parent_node, new_name, W_OK, has_rw)) {
1114:system/core/sdcard/sdcard.c **** res = -EACCES;
1115:system/core/sdcard/sdcard.c **** goto lookup_error;
1116:system/core/sdcard/sdcard.c **** }
1117:system/core/sdcard/sdcard.c **** child_node = lookup_child_by_name_locked(old_parent_node, old_name);
1118:system/core/sdcard/sdcard.c **** if (!child_node || get_node_path_locked(child_node,
1119:system/core/sdcard/sdcard.c **** old_child_path, sizeof(old_child_path)) < 0) {
1120:system/core/sdcard/sdcard.c **** res = -ENOENT;
1121:system/core/sdcard/sdcard.c **** goto lookup_error;
1122:system/core/sdcard/sdcard.c **** }
1123:system/core/sdcard/sdcard.c **** acquire_node_locked(child_node);
1124:system/core/sdcard/sdcard.c **** pthread_mutex_unlock(&fuse->lock);
1125:system/core/sdcard/sdcard.c ****
1126:system/core/sdcard/sdcard.c **** /* Special case for renaming a file where destination is same path
1127:system/core/sdcard/sdcard.c **** * differing only by case. In this case we don't want to look for a case
1128:system/core/sdcard/sdcard.c **** * insensitive match. This allows commands like "mv foo FOO" to work as expected.
1129:system/core/sdcard/sdcard.c **** */
1130:system/core/sdcard/sdcard.c **** int search = old_parent_node != new_parent_node
1131:system/core/sdcard/sdcard.c **** || strcasecmp(old_name, new_name);
ARM GAS /tmp/cc3I8rcL.s page 22
1132:system/core/sdcard/sdcard.c **** if (!(new_actual_name = find_file_within(new_parent_path, new_name,
1133:system/core/sdcard/sdcard.c **** new_child_path, sizeof(new_child_path), search))) {
1134:system/core/sdcard/sdcard.c **** res = -ENOENT;
1135:system/core/sdcard/sdcard.c **** goto io_error;
1136:system/core/sdcard/sdcard.c **** }
1137:system/core/sdcard/sdcard.c ****
1138:system/core/sdcard/sdcard.c **** TRACE("[%d] RENAME %s->%s\n", handler->token, old_child_path, new_child_path);
1139:system/core/sdcard/sdcard.c **** res = rename(old_child_path, new_child_path);
1140:system/core/sdcard/sdcard.c **** if (res < 0) {
1141:system/core/sdcard/sdcard.c **** res = -errno;
1142:system/core/sdcard/sdcard.c **** goto io_error;
1143:system/core/sdcard/sdcard.c **** }
1144:system/core/sdcard/sdcard.c ****
1145:system/core/sdcard/sdcard.c **** pthread_mutex_lock(&fuse->lock);
1146:system/core/sdcard/sdcard.c **** res = rename_node_locked(child_node, new_name, new_actual_name);
1147:system/core/sdcard/sdcard.c **** if (!res) {
1148:system/core/sdcard/sdcard.c **** remove_node_from_parent_locked(child_node);
1149:system/core/sdcard/sdcard.c **** add_node_to_parent_locked(child_node, new_parent_node);
1150:system/core/sdcard/sdcard.c **** }
1151:system/core/sdcard/sdcard.c **** goto done;
1152:system/core/sdcard/sdcard.c ****
1153:system/core/sdcard/sdcard.c **** io_error:
1154:system/core/sdcard/sdcard.c **** pthread_mutex_lock(&fuse->lock);
1155:system/core/sdcard/sdcard.c **** done:
1156:system/core/sdcard/sdcard.c **** release_node_locked(child_node);
1157:system/core/sdcard/sdcard.c **** lookup_error:
1158:system/core/sdcard/sdcard.c **** pthread_mutex_unlock(&fuse->lock);
1159:system/core/sdcard/sdcard.c **** return res;
1160:system/core/sdcard/sdcard.c **** }
1161:system/core/sdcard/sdcard.c ****
1162:system/core/sdcard/sdcard.c **** static int open_flags_to_access_mode(int open_flags) {
1163:system/core/sdcard/sdcard.c **** if ((open_flags & O_ACCMODE) == O_RDONLY) {
1164:system/core/sdcard/sdcard.c **** return R_OK;
1165:system/core/sdcard/sdcard.c **** } else if ((open_flags & O_ACCMODE) == O_WRONLY) {
1166:system/core/sdcard/sdcard.c **** return W_OK;
1167:system/core/sdcard/sdcard.c **** } else {
1168:system/core/sdcard/sdcard.c **** /* Probably O_RDRW, but treat as default to be safe */
1169:system/core/sdcard/sdcard.c **** return R_OK | W_OK;
1170:system/core/sdcard/sdcard.c **** }
1171:system/core/sdcard/sdcard.c **** }
1172:system/core/sdcard/sdcard.c ****
1173:system/core/sdcard/sdcard.c **** static int handle_open(struct fuse* fuse, struct fuse_handler* handler,
1174:system/core/sdcard/sdcard.c **** const struct fuse_in_header* hdr, const struct fuse_open_in* req)
1175:system/core/sdcard/sdcard.c **** {
1176:system/core/sdcard/sdcard.c **** bool has_rw;
1177:system/core/sdcard/sdcard.c **** struct node* node;
1178:system/core/sdcard/sdcard.c **** char path[PATH_MAX];
1179:system/core/sdcard/sdcard.c **** struct fuse_open_out out;
1180:system/core/sdcard/sdcard.c **** struct handle *h;
1181:system/core/sdcard/sdcard.c ****
1182:system/core/sdcard/sdcard.c **** pthread_mutex_lock(&fuse->lock);
1183:system/core/sdcard/sdcard.c **** has_rw = get_caller_has_rw_locked(fuse, hdr);
1184:system/core/sdcard/sdcard.c **** node = lookup_node_and_path_by_id_locked(fuse, hdr->nodeid, path, sizeof(path));
1185:system/core/sdcard/sdcard.c **** TRACE("[%d] OPEN 0%o @ %llx (%s)\n", handler->token,
1186:system/core/sdcard/sdcard.c **** req->flags, hdr->nodeid, node ? node->name : "?");
1187:system/core/sdcard/sdcard.c **** pthread_mutex_unlock(&fuse->lock);
1188:system/core/sdcard/sdcard.c ****
ARM GAS /tmp/cc3I8rcL.s page 23
1189:system/core/sdcard/sdcard.c **** if (!node) {
1190:system/core/sdcard/sdcard.c **** return -ENOENT;
1191:system/core/sdcard/sdcard.c **** }
1192:system/core/sdcard/sdcard.c **** if (!check_caller_access_to_node(fuse, hdr, node,
1193:system/core/sdcard/sdcard.c **** open_flags_to_access_mode(req->flags), has_rw)) {
1194:system/core/sdcard/sdcard.c **** return -EACCES;
1195:system/core/sdcard/sdcard.c **** }
1196:system/core/sdcard/sdcard.c **** h = malloc(sizeof(*h));
1197:system/core/sdcard/sdcard.c **** if (!h) {
1198:system/core/sdcard/sdcard.c **** return -ENOMEM;
1199:system/core/sdcard/sdcard.c **** }
1200:system/core/sdcard/sdcard.c **** TRACE("[%d] OPEN %s\n", handler->token, path);
1201:system/core/sdcard/sdcard.c **** h->fd = open(path, req->flags);
1202:system/core/sdcard/sdcard.c **** if (h->fd < 0) {
1203:system/core/sdcard/sdcard.c **** free(h);
1204:system/core/sdcard/sdcard.c **** return -errno;
1205:system/core/sdcard/sdcard.c **** }
1206:system/core/sdcard/sdcard.c **** out.fh = ptr_to_id(h);
1207:system/core/sdcard/sdcard.c **** out.open_flags = 0;
1208:system/core/sdcard/sdcard.c **** out.padding = 0;
1209:system/core/sdcard/sdcard.c **** fuse_reply(fuse, hdr->unique, &out, sizeof(out));
1210:system/core/sdcard/sdcard.c **** return NO_STATUS;
1211:system/core/sdcard/sdcard.c **** }
1212:system/core/sdcard/sdcard.c ****
1213:system/core/sdcard/sdcard.c **** static int handle_read(struct fuse* fuse, struct fuse_handler* handler,
1214:system/core/sdcard/sdcard.c **** const struct fuse_in_header* hdr, const struct fuse_read_in* req)
1215:system/core/sdcard/sdcard.c **** {
1216:system/core/sdcard/sdcard.c **** struct handle *h = id_to_ptr(req->fh);
1217:system/core/sdcard/sdcard.c **** __u64 unique = hdr->unique;
1218:system/core/sdcard/sdcard.c **** __u32 size = req->size;
1219:system/core/sdcard/sdcard.c **** __u64 offset = req->offset;
1220:system/core/sdcard/sdcard.c **** int res;
1221:system/core/sdcard/sdcard.c ****
1222:system/core/sdcard/sdcard.c **** /* Don't access any other fields of hdr or req beyond this point, the read buffer
1223:system/core/sdcard/sdcard.c **** * overlaps the request buffer and will clobber data in the request. This
1224:system/core/sdcard/sdcard.c **** * saves us 128KB per request handler thread at the cost of this scary comment. */
1225:system/core/sdcard/sdcard.c ****
1226:system/core/sdcard/sdcard.c **** TRACE("[%d] READ %p(%d) %u@%llu\n", handler->token,
1227:system/core/sdcard/sdcard.c **** h, h->fd, size, offset);
1228:system/core/sdcard/sdcard.c **** if (size > sizeof(handler->read_buffer)) {
1229:system/core/sdcard/sdcard.c **** return -EINVAL;
1230:system/core/sdcard/sdcard.c **** }
1231:system/core/sdcard/sdcard.c **** res = pread64(h->fd, handler->read_buffer, size, offset);
1232:system/core/sdcard/sdcard.c **** if (res < 0) {
1233:system/core/sdcard/sdcard.c **** return -errno;
1234:system/core/sdcard/sdcard.c **** }
1235:system/core/sdcard/sdcard.c **** fuse_reply(fuse, unique, handler->read_buffer, res);
1236:system/core/sdcard/sdcard.c **** return NO_STATUS;
1237:system/core/sdcard/sdcard.c **** }
1238:system/core/sdcard/sdcard.c ****
1239:system/core/sdcard/sdcard.c **** static int handle_write(struct fuse* fuse, struct fuse_handler* handler,
1240:system/core/sdcard/sdcard.c **** const struct fuse_in_header* hdr, const struct fuse_write_in* req,
1241:system/core/sdcard/sdcard.c **** const void* buffer)
1242:system/core/sdcard/sdcard.c **** {
1243:system/core/sdcard/sdcard.c **** struct fuse_write_out out;
1244:system/core/sdcard/sdcard.c **** struct handle *h = id_to_ptr(req->fh);
1245:system/core/sdcard/sdcard.c **** int res;
ARM GAS /tmp/cc3I8rcL.s page 24
1246:system/core/sdcard/sdcard.c ****
1247:system/core/sdcard/sdcard.c **** TRACE("[%d] WRITE %p(%d) %u@%llu\n", handler->token,
1248:system/core/sdcard/sdcard.c **** h, h->fd, req->size, req->offset);
1249:system/core/sdcard/sdcard.c **** res = pwrite64(h->fd, buffer, req->size, req->offset);
1250:system/core/sdcard/sdcard.c **** if (res < 0) {
1251:system/core/sdcard/sdcard.c **** return -errno;
1252:system/core/sdcard/sdcard.c **** }
1253:system/core/sdcard/sdcard.c **** out.size = res;
1254:system/core/sdcard/sdcard.c **** fuse_reply(fuse, hdr->unique, &out, sizeof(out));
1255:system/core/sdcard/sdcard.c **** return NO_STATUS;
1256:system/core/sdcard/sdcard.c **** }
1257:system/core/sdcard/sdcard.c ****
1258:system/core/sdcard/sdcard.c **** static int handle_statfs(struct fuse* fuse, struct fuse_handler* handler,
1259:system/core/sdcard/sdcard.c **** const struct fuse_in_header* hdr)
1260:system/core/sdcard/sdcard.c **** {
1261:system/core/sdcard/sdcard.c **** char path[PATH_MAX];
1262:system/core/sdcard/sdcard.c **** struct statfs stat;
1263:system/core/sdcard/sdcard.c **** struct fuse_statfs_out out;
1264:system/core/sdcard/sdcard.c **** int res;
1265:system/core/sdcard/sdcard.c ****
1266:system/core/sdcard/sdcard.c **** pthread_mutex_lock(&fuse->lock);
1267:system/core/sdcard/sdcard.c **** TRACE("[%d] STATFS\n", handler->token);
1268:system/core/sdcard/sdcard.c **** res = get_node_path_locked(&fuse->root, path, sizeof(path));
1269:system/core/sdcard/sdcard.c **** pthread_mutex_unlock(&fuse->lock);
1270:system/core/sdcard/sdcard.c **** if (res < 0) {
1271:system/core/sdcard/sdcard.c **** return -ENOENT;
1272:system/core/sdcard/sdcard.c **** }
1273:system/core/sdcard/sdcard.c **** if (statfs(fuse->root.name, &stat) < 0) {
1274:system/core/sdcard/sdcard.c **** return -errno;
1275:system/core/sdcard/sdcard.c **** }
1276:system/core/sdcard/sdcard.c **** memset(&out, 0, sizeof(out));
1277:system/core/sdcard/sdcard.c **** out.st.blocks = stat.f_blocks;
1278:system/core/sdcard/sdcard.c **** out.st.bfree = stat.f_bfree;
1279:system/core/sdcard/sdcard.c **** out.st.bavail = stat.f_bavail;
1280:system/core/sdcard/sdcard.c **** out.st.files = stat.f_files;
1281:system/core/sdcard/sdcard.c **** out.st.ffree = stat.f_ffree;
1282:system/core/sdcard/sdcard.c **** out.st.bsize = stat.f_bsize;
1283:system/core/sdcard/sdcard.c **** out.st.namelen = stat.f_namelen;
1284:system/core/sdcard/sdcard.c **** out.st.frsize = stat.f_frsize;
1285:system/core/sdcard/sdcard.c **** fuse_reply(fuse, hdr->unique, &out, sizeof(out));
1286:system/core/sdcard/sdcard.c **** return NO_STATUS;
1287:system/core/sdcard/sdcard.c **** }
1288:system/core/sdcard/sdcard.c ****
1289:system/core/sdcard/sdcard.c **** static int handle_release(struct fuse* fuse, struct fuse_handler* handler,
1290:system/core/sdcard/sdcard.c **** const struct fuse_in_header* hdr, const struct fuse_release_in* req)
1291:system/core/sdcard/sdcard.c **** {
1292:system/core/sdcard/sdcard.c **** struct handle *h = id_to_ptr(req->fh);
1293:system/core/sdcard/sdcard.c ****
1294:system/core/sdcard/sdcard.c **** TRACE("[%d] RELEASE %p(%d)\n", handler->token, h, h->fd);
1295:system/core/sdcard/sdcard.c **** close(h->fd);
1296:system/core/sdcard/sdcard.c **** free(h);
1297:system/core/sdcard/sdcard.c **** return 0;
1298:system/core/sdcard/sdcard.c **** }
1299:system/core/sdcard/sdcard.c ****
1300:system/core/sdcard/sdcard.c **** static int handle_fsync(struct fuse* fuse, struct fuse_handler* handler,
1301:system/core/sdcard/sdcard.c **** const struct fuse_in_header* hdr, const struct fuse_fsync_in* req)
1302:system/core/sdcard/sdcard.c **** {
ARM GAS /tmp/cc3I8rcL.s page 25
1303:system/core/sdcard/sdcard.c **** int is_data_sync = req->fsync_flags & 1;
1304:system/core/sdcard/sdcard.c **** struct handle *h = id_to_ptr(req->fh);
1305:system/core/sdcard/sdcard.c **** int res;
1306:system/core/sdcard/sdcard.c ****
1307:system/core/sdcard/sdcard.c **** TRACE("[%d] FSYNC %p(%d) is_data_sync=%d\n", handler->token,
1308:system/core/sdcard/sdcard.c **** h, h->fd, is_data_sync);
1309:system/core/sdcard/sdcard.c **** res = is_data_sync ? fdatasync(h->fd) : fsync(h->fd);
1310:system/core/sdcard/sdcard.c **** if (res < 0) {
1311:system/core/sdcard/sdcard.c **** return -errno;
1312:system/core/sdcard/sdcard.c **** }
1313:system/core/sdcard/sdcard.c **** return 0;
1314:system/core/sdcard/sdcard.c **** }
1315:system/core/sdcard/sdcard.c ****
1316:system/core/sdcard/sdcard.c **** static int handle_flush(struct fuse* fuse, struct fuse_handler* handler,
1317:system/core/sdcard/sdcard.c **** const struct fuse_in_header* hdr)
1318:system/core/sdcard/sdcard.c **** {
1319:system/core/sdcard/sdcard.c **** TRACE("[%d] FLUSH\n", handler->token);
1320:system/core/sdcard/sdcard.c **** return 0;
1321:system/core/sdcard/sdcard.c **** }
1322:system/core/sdcard/sdcard.c ****
1323:system/core/sdcard/sdcard.c **** static int handle_opendir(struct fuse* fuse, struct fuse_handler* handler,
1324:system/core/sdcard/sdcard.c **** const struct fuse_in_header* hdr, const struct fuse_open_in* req)
1325:system/core/sdcard/sdcard.c **** {
1326:system/core/sdcard/sdcard.c **** struct node* node;
1327:system/core/sdcard/sdcard.c **** char path[PATH_MAX];
1328:system/core/sdcard/sdcard.c **** struct fuse_open_out out;
1329:system/core/sdcard/sdcard.c **** struct dirhandle *h;
1330:system/core/sdcard/sdcard.c ****
1331:system/core/sdcard/sdcard.c **** pthread_mutex_lock(&fuse->lock);
1332:system/core/sdcard/sdcard.c **** node = lookup_node_and_path_by_id_locked(fuse, hdr->nodeid, path, sizeof(path));
1333:system/core/sdcard/sdcard.c **** TRACE("[%d] OPENDIR @ %llx (%s)\n", handler->token,
1334:system/core/sdcard/sdcard.c **** hdr->nodeid, node ? node->name : "?");
1335:system/core/sdcard/sdcard.c **** pthread_mutex_unlock(&fuse->lock);
1336:system/core/sdcard/sdcard.c ****
1337:system/core/sdcard/sdcard.c **** if (!node) {
1338:system/core/sdcard/sdcard.c **** return -ENOENT;
1339:system/core/sdcard/sdcard.c **** }
1340:system/core/sdcard/sdcard.c **** if (!check_caller_access_to_node(fuse, hdr, node, R_OK, false)) {
1341:system/core/sdcard/sdcard.c **** return -EACCES;
1342:system/core/sdcard/sdcard.c **** }
1343:system/core/sdcard/sdcard.c **** h = malloc(sizeof(*h));
1344:system/core/sdcard/sdcard.c **** if (!h) {
1345:system/core/sdcard/sdcard.c **** return -ENOMEM;
1346:system/core/sdcard/sdcard.c **** }
1347:system/core/sdcard/sdcard.c **** TRACE("[%d] OPENDIR %s\n", handler->token, path);
1348:system/core/sdcard/sdcard.c **** h->d = opendir(path);
1349:system/core/sdcard/sdcard.c **** if (!h->d) {
1350:system/core/sdcard/sdcard.c **** free(h);
1351:system/core/sdcard/sdcard.c **** return -errno;
1352:system/core/sdcard/sdcard.c **** }
1353:system/core/sdcard/sdcard.c **** out.fh = ptr_to_id(h);
1354:system/core/sdcard/sdcard.c **** out.open_flags = 0;
1355:system/core/sdcard/sdcard.c **** out.padding = 0;
1356:system/core/sdcard/sdcard.c **** fuse_reply(fuse, hdr->unique, &out, sizeof(out));
1357:system/core/sdcard/sdcard.c **** return NO_STATUS;
1358:system/core/sdcard/sdcard.c **** }
1359:system/core/sdcard/sdcard.c ****
ARM GAS /tmp/cc3I8rcL.s page 26
1360:system/core/sdcard/sdcard.c **** static int handle_readdir(struct fuse* fuse, struct fuse_handler* handler,
1361:system/core/sdcard/sdcard.c **** const struct fuse_in_header* hdr, const struct fuse_read_in* req)
1362:system/core/sdcard/sdcard.c **** {
1363:system/core/sdcard/sdcard.c **** char buffer[8192];
1364:system/core/sdcard/sdcard.c **** struct fuse_dirent *fde = (struct fuse_dirent*) buffer;
1365:system/core/sdcard/sdcard.c **** struct dirent *de;
1366:system/core/sdcard/sdcard.c **** struct dirhandle *h = id_to_ptr(req->fh);
1367:system/core/sdcard/sdcard.c **** struct node* parent_node;
1368:system/core/sdcard/sdcard.c ****
1369:system/core/sdcard/sdcard.c **** TRACE("[%d] READDIR %p\n", handler->token, h);
1370:system/core/sdcard/sdcard.c **** if (req->offset == 0) {
1371:system/core/sdcard/sdcard.c **** /* rewinddir() might have been called above us, so rewind here too */
1372:system/core/sdcard/sdcard.c **** TRACE("[%d] calling rewinddir()\n", handler->token);
1373:system/core/sdcard/sdcard.c **** rewinddir(h->d);
1374:system/core/sdcard/sdcard.c **** }
1375:system/core/sdcard/sdcard.c **** skip:
1376:system/core/sdcard/sdcard.c **** de = readdir(h->d);
1377:system/core/sdcard/sdcard.c **** if (!de) {
1378:system/core/sdcard/sdcard.c **** return 0;
1379:system/core/sdcard/sdcard.c **** }
1380:system/core/sdcard/sdcard.c **** fde->ino = FUSE_UNKNOWN_INO;
1381:system/core/sdcard/sdcard.c **** /* increment the offset so we can detect when rewinddir() seeks back to the beginning */
1382:system/core/sdcard/sdcard.c **** fde->off = req->offset + 1;
1383:system/core/sdcard/sdcard.c **** fde->type = de->d_type;
1384:system/core/sdcard/sdcard.c **** fde->namelen = strlen(de->d_name);
1385:system/core/sdcard/sdcard.c ****
1386:system/core/sdcard/sdcard.c **** parent_node = lookup_node_by_id_locked(fuse, hdr->nodeid);
1387:system/core/sdcard/sdcard.c ****
1388:system/core/sdcard/sdcard.c **** if (!check_caller_access_to_name(fuse, hdr, parent_node, de->d_name, R_OK, false)) {
1389:system/core/sdcard/sdcard.c **** goto skip;
1390:system/core/sdcard/sdcard.c **** }
1391:system/core/sdcard/sdcard.c ****
1392:system/core/sdcard/sdcard.c **** memcpy(fde->name, de->d_name, fde->namelen + 1);
1393:system/core/sdcard/sdcard.c **** fuse_reply(fuse, hdr->unique, fde,
1394:system/core/sdcard/sdcard.c **** FUSE_DIRENT_ALIGN(sizeof(struct fuse_dirent) + fde->namelen));
1395:system/core/sdcard/sdcard.c **** return NO_STATUS;
1396:system/core/sdcard/sdcard.c **** }
1397:system/core/sdcard/sdcard.c ****
1398:system/core/sdcard/sdcard.c **** static int handle_releasedir(struct fuse* fuse, struct fuse_handler* handler,
1399:system/core/sdcard/sdcard.c **** const struct fuse_in_header* hdr, const struct fuse_release_in* req)
1400:system/core/sdcard/sdcard.c **** {
1401:system/core/sdcard/sdcard.c **** struct dirhandle *h = id_to_ptr(req->fh);
1402:system/core/sdcard/sdcard.c ****
1403:system/core/sdcard/sdcard.c **** TRACE("[%d] RELEASEDIR %p\n", handler->token, h);
1404:system/core/sdcard/sdcard.c **** closedir(h->d);
1405:system/core/sdcard/sdcard.c **** free(h);
1406:system/core/sdcard/sdcard.c **** return 0;
1407:system/core/sdcard/sdcard.c **** }
1408:system/core/sdcard/sdcard.c ****
1409:system/core/sdcard/sdcard.c **** static int handle_init(struct fuse* fuse, struct fuse_handler* handler,
1410:system/core/sdcard/sdcard.c **** const struct fuse_in_header* hdr, const struct fuse_init_in* req)
1411:system/core/sdcard/sdcard.c **** {
1412:system/core/sdcard/sdcard.c **** struct fuse_init_out out;
1413:system/core/sdcard/sdcard.c ****
1414:system/core/sdcard/sdcard.c **** TRACE("[%d] INIT ver=%d.%d maxread=%d flags=%x\n",
1415:system/core/sdcard/sdcard.c **** handler->token, req->major, req->minor, req->max_readahead, req->flags);
1416:system/core/sdcard/sdcard.c **** out.major = FUSE_KERNEL_VERSION;
ARM GAS /tmp/cc3I8rcL.s page 27
1417:system/core/sdcard/sdcard.c **** out.minor = FUSE_KERNEL_MINOR_VERSION;
1418:system/core/sdcard/sdcard.c **** out.max_readahead = req->max_readahead;
1419:system/core/sdcard/sdcard.c **** out.flags = FUSE_ATOMIC_O_TRUNC | FUSE_BIG_WRITES;
1420:system/core/sdcard/sdcard.c **** out.max_background = 32;
1421:system/core/sdcard/sdcard.c **** out.congestion_threshold = 32;
1422:system/core/sdcard/sdcard.c **** out.max_write = MAX_WRITE;
1423:system/core/sdcard/sdcard.c **** fuse_reply(fuse, hdr->unique, &out, sizeof(out));
1424:system/core/sdcard/sdcard.c **** return NO_STATUS;
1425:system/core/sdcard/sdcard.c **** }
1426:system/core/sdcard/sdcard.c ****
1427:system/core/sdcard/sdcard.c **** static int handle_fuse_request(struct fuse *fuse, struct fuse_handler* handler,
1428:system/core/sdcard/sdcard.c **** const struct fuse_in_header *hdr, const void *data, size_t data_len)
1429:system/core/sdcard/sdcard.c **** {
1430:system/core/sdcard/sdcard.c **** switch (hdr->opcode) {
1431:system/core/sdcard/sdcard.c **** case FUSE_LOOKUP: { /* bytez[] -> entry_out */
1432:system/core/sdcard/sdcard.c **** const char* name = data;
1433:system/core/sdcard/sdcard.c **** return handle_lookup(fuse, handler, hdr, name);
1434:system/core/sdcard/sdcard.c **** }
1435:system/core/sdcard/sdcard.c ****
1436:system/core/sdcard/sdcard.c **** case FUSE_FORGET: {
1437:system/core/sdcard/sdcard.c **** const struct fuse_forget_in *req = data;
1438:system/core/sdcard/sdcard.c **** return handle_forget(fuse, handler, hdr, req);
1439:system/core/sdcard/sdcard.c **** }
1440:system/core/sdcard/sdcard.c ****
1441:system/core/sdcard/sdcard.c **** case FUSE_GETATTR: { /* getattr_in -> attr_out */
1442:system/core/sdcard/sdcard.c **** const struct fuse_getattr_in *req = data;
1443:system/core/sdcard/sdcard.c **** return handle_getattr(fuse, handler, hdr, req);
1444:system/core/sdcard/sdcard.c **** }
1445:system/core/sdcard/sdcard.c ****
1446:system/core/sdcard/sdcard.c **** case FUSE_SETATTR: { /* setattr_in -> attr_out */
1447:system/core/sdcard/sdcard.c **** const struct fuse_setattr_in *req = data;
1448:system/core/sdcard/sdcard.c **** return handle_setattr(fuse, handler, hdr, req);
1449:system/core/sdcard/sdcard.c **** }
1450:system/core/sdcard/sdcard.c ****
1451:system/core/sdcard/sdcard.c **** // case FUSE_READLINK:
1452:system/core/sdcard/sdcard.c **** // case FUSE_SYMLINK:
1453:system/core/sdcard/sdcard.c **** case FUSE_MKNOD: { /* mknod_in, bytez[] -> entry_out */
1454:system/core/sdcard/sdcard.c **** const struct fuse_mknod_in *req = data;
1455:system/core/sdcard/sdcard.c **** const char *name = ((const char*) data) + sizeof(*req);
1456:system/core/sdcard/sdcard.c **** return handle_mknod(fuse, handler, hdr, req, name);
1457:system/core/sdcard/sdcard.c **** }
1458:system/core/sdcard/sdcard.c ****
1459:system/core/sdcard/sdcard.c **** case FUSE_MKDIR: { /* mkdir_in, bytez[] -> entry_out */
1460:system/core/sdcard/sdcard.c **** const struct fuse_mkdir_in *req = data;
1461:system/core/sdcard/sdcard.c **** const char *name = ((const char*) data) + sizeof(*req);
1462:system/core/sdcard/sdcard.c **** return handle_mkdir(fuse, handler, hdr, req, name);
1463:system/core/sdcard/sdcard.c **** }
1464:system/core/sdcard/sdcard.c ****
1465:system/core/sdcard/sdcard.c **** case FUSE_UNLINK: { /* bytez[] -> */
1466:system/core/sdcard/sdcard.c **** const char* name = data;
1467:system/core/sdcard/sdcard.c **** return handle_unlink(fuse, handler, hdr, name);
1468:system/core/sdcard/sdcard.c **** }
1469:system/core/sdcard/sdcard.c ****
1470:system/core/sdcard/sdcard.c **** case FUSE_RMDIR: { /* bytez[] -> */
1471:system/core/sdcard/sdcard.c **** const char* name = data;
1472:system/core/sdcard/sdcard.c **** return handle_rmdir(fuse, handler, hdr, name);
1473:system/core/sdcard/sdcard.c **** }
ARM GAS /tmp/cc3I8rcL.s page 28
1474:system/core/sdcard/sdcard.c ****
1475:system/core/sdcard/sdcard.c **** case FUSE_RENAME: { /* rename_in, oldname, newname -> */
1476:system/core/sdcard/sdcard.c **** const struct fuse_rename_in *req = data;
1477:system/core/sdcard/sdcard.c **** const char *old_name = ((const char*) data) + sizeof(*req);
1478:system/core/sdcard/sdcard.c **** const char *new_name = old_name + strlen(old_name) + 1;
1479:system/core/sdcard/sdcard.c **** return handle_rename(fuse, handler, hdr, req, old_name, new_name);
1480:system/core/sdcard/sdcard.c **** }
1481:system/core/sdcard/sdcard.c ****
1482:system/core/sdcard/sdcard.c **** // case FUSE_LINK:
1483:system/core/sdcard/sdcard.c **** case FUSE_OPEN: { /* open_in -> open_out */
1484:system/core/sdcard/sdcard.c **** const struct fuse_open_in *req = data;
1485:system/core/sdcard/sdcard.c **** return handle_open(fuse, handler, hdr, req);
1486:system/core/sdcard/sdcard.c **** }
1487:system/core/sdcard/sdcard.c ****
1488:system/core/sdcard/sdcard.c **** case FUSE_READ: { /* read_in -> byte[] */
1489:system/core/sdcard/sdcard.c **** const struct fuse_read_in *req = data;
1490:system/core/sdcard/sdcard.c **** return handle_read(fuse, handler, hdr, req);
1491:system/core/sdcard/sdcard.c **** }
1492:system/core/sdcard/sdcard.c ****
1493:system/core/sdcard/sdcard.c **** case FUSE_WRITE: { /* write_in, byte[write_in.size] -> write_out */
1494:system/core/sdcard/sdcard.c **** const struct fuse_write_in *req = data;
1495:system/core/sdcard/sdcard.c **** const void* buffer = (const __u8*)data + sizeof(*req);
1496:system/core/sdcard/sdcard.c **** return handle_write(fuse, handler, hdr, req, buffer);
1497:system/core/sdcard/sdcard.c **** }
1498:system/core/sdcard/sdcard.c ****
1499:system/core/sdcard/sdcard.c **** case FUSE_STATFS: { /* getattr_in -> attr_out */
1500:system/core/sdcard/sdcard.c **** return handle_statfs(fuse, handler, hdr);
1501:system/core/sdcard/sdcard.c **** }
1502:system/core/sdcard/sdcard.c ****
1503:system/core/sdcard/sdcard.c **** case FUSE_RELEASE: { /* release_in -> */
1504:system/core/sdcard/sdcard.c **** const struct fuse_release_in *req = data;
1505:system/core/sdcard/sdcard.c **** return handle_release(fuse, handler, hdr, req);
1506:system/core/sdcard/sdcard.c **** }
1507:system/core/sdcard/sdcard.c ****
1508:system/core/sdcard/sdcard.c **** case FUSE_FSYNC: {
1509:system/core/sdcard/sdcard.c **** const struct fuse_fsync_in *req = data;
1510:system/core/sdcard/sdcard.c **** return handle_fsync(fuse, handler, hdr, req);
1511:system/core/sdcard/sdcard.c **** }
1512:system/core/sdcard/sdcard.c ****
1513:system/core/sdcard/sdcard.c **** // case FUSE_SETXATTR:
1514:system/core/sdcard/sdcard.c **** // case FUSE_GETXATTR:
1515:system/core/sdcard/sdcard.c **** // case FUSE_LISTXATTR:
1516:system/core/sdcard/sdcard.c **** // case FUSE_REMOVEXATTR:
1517:system/core/sdcard/sdcard.c **** case FUSE_FLUSH: {
1518:system/core/sdcard/sdcard.c **** return handle_flush(fuse, handler, hdr);
1519:system/core/sdcard/sdcard.c **** }
1520:system/core/sdcard/sdcard.c ****
1521:system/core/sdcard/sdcard.c **** case FUSE_OPENDIR: { /* open_in -> open_out */
1522:system/core/sdcard/sdcard.c **** const struct fuse_open_in *req = data;
1523:system/core/sdcard/sdcard.c **** return handle_opendir(fuse, handler, hdr, req);
1524:system/core/sdcard/sdcard.c **** }
1525:system/core/sdcard/sdcard.c ****
1526:system/core/sdcard/sdcard.c **** case FUSE_READDIR: {
1527:system/core/sdcard/sdcard.c **** const struct fuse_read_in *req = data;
1528:system/core/sdcard/sdcard.c **** return handle_readdir(fuse, handler, hdr, req);
1529:system/core/sdcard/sdcard.c **** }
1530:system/core/sdcard/sdcard.c ****
ARM GAS /tmp/cc3I8rcL.s page 29
1531:system/core/sdcard/sdcard.c **** case FUSE_RELEASEDIR: { /* release_in -> */
1532:system/core/sdcard/sdcard.c **** const struct fuse_release_in *req = data;
1533:system/core/sdcard/sdcard.c **** return handle_releasedir(fuse, handler, hdr, req);
1534:system/core/sdcard/sdcard.c **** }
1535:system/core/sdcard/sdcard.c ****
1536:system/core/sdcard/sdcard.c **** // case FUSE_FSYNCDIR:
1537:system/core/sdcard/sdcard.c **** case FUSE_INIT: { /* init_in -> init_out */
1538:system/core/sdcard/sdcard.c **** const struct fuse_init_in *req = data;
1539:system/core/sdcard/sdcard.c **** return handle_init(fuse, handler, hdr, req);
1540:system/core/sdcard/sdcard.c **** }
1541:system/core/sdcard/sdcard.c ****
1542:system/core/sdcard/sdcard.c **** default: {
1543:system/core/sdcard/sdcard.c **** TRACE("[%d] NOTIMPL op=%d uniq=%llx nid=%llx\n",
1544:system/core/sdcard/sdcard.c **** handler->token, hdr->opcode, hdr->unique, hdr->nodeid);
1545:system/core/sdcard/sdcard.c **** return -ENOSYS;
1546:system/core/sdcard/sdcard.c **** }
1547:system/core/sdcard/sdcard.c **** }
1548:system/core/sdcard/sdcard.c **** }
1549:system/core/sdcard/sdcard.c ****
1550:system/core/sdcard/sdcard.c **** static void handle_fuse_requests(struct fuse_handler* handler)
1551:system/core/sdcard/sdcard.c **** {
1552:system/core/sdcard/sdcard.c **** struct fuse* fuse = handler->fuse;
1553:system/core/sdcard/sdcard.c **** for (;;) {
1554:system/core/sdcard/sdcard.c **** ssize_t len = read(fuse->fd,
1555:system/core/sdcard/sdcard.c **** handler->request_buffer, sizeof(handler->request_buffer));
1556:system/core/sdcard/sdcard.c **** if (len < 0) {
1557:system/core/sdcard/sdcard.c **** if (errno != EINTR) {
1558:system/core/sdcard/sdcard.c **** ERROR("[%d] handle_fuse_requests: errno=%d\n", handler->token, errno);
1559:system/core/sdcard/sdcard.c **** }
1560:system/core/sdcard/sdcard.c **** continue;
1561:system/core/sdcard/sdcard.c **** }
1562:system/core/sdcard/sdcard.c ****
1563:system/core/sdcard/sdcard.c **** if ((size_t)len < sizeof(struct fuse_in_header)) {
1564:system/core/sdcard/sdcard.c **** ERROR("[%d] request too short: len=%zu\n", handler->token, (size_t)len);
1565:system/core/sdcard/sdcard.c **** continue;
1566:system/core/sdcard/sdcard.c **** }
1567:system/core/sdcard/sdcard.c ****
1568:system/core/sdcard/sdcard.c **** const struct fuse_in_header *hdr = (void*)handler->request_buffer;
1569:system/core/sdcard/sdcard.c **** if (hdr->len != (size_t)len) {
1570:system/core/sdcard/sdcard.c **** ERROR("[%d] malformed header: len=%zu, hdr->len=%u\n",
1571:system/core/sdcard/sdcard.c **** handler->token, (size_t)len, hdr->len);
1572:system/core/sdcard/sdcard.c **** continue;
1573:system/core/sdcard/sdcard.c **** }
1574:system/core/sdcard/sdcard.c ****
1575:system/core/sdcard/sdcard.c **** const void *data = handler->request_buffer + sizeof(struct fuse_in_header);
1576:system/core/sdcard/sdcard.c **** size_t data_len = len - sizeof(struct fuse_in_header);
1577:system/core/sdcard/sdcard.c **** __u64 unique = hdr->unique;
1578:system/core/sdcard/sdcard.c **** int res = handle_fuse_request(fuse, handler, hdr, data, data_len);
1579:system/core/sdcard/sdcard.c ****
1580:system/core/sdcard/sdcard.c **** /* We do not access the request again after this point because the underlying
1581:system/core/sdcard/sdcard.c **** * buffer storage may have been reused while processing the request. */
1582:system/core/sdcard/sdcard.c ****
1583:system/core/sdcard/sdcard.c **** if (res != NO_STATUS) {
1584:system/core/sdcard/sdcard.c **** if (res) {
1585:system/core/sdcard/sdcard.c **** TRACE("[%d] ERROR %d\n", handler->token, res);
1586:system/core/sdcard/sdcard.c **** }
1587:system/core/sdcard/sdcard.c **** fuse_status(fuse, unique, res);
ARM GAS /tmp/cc3I8rcL.s page 30
1588:system/core/sdcard/sdcard.c **** }
1589:system/core/sdcard/sdcard.c **** }
1590:system/core/sdcard/sdcard.c **** }
1591:system/core/sdcard/sdcard.c ****
1592:system/core/sdcard/sdcard.c **** static void* start_handler(void* data)
1593:system/core/sdcard/sdcard.c **** {
1594:system/core/sdcard/sdcard.c **** struct fuse_handler* handler = data;
1595:system/core/sdcard/sdcard.c **** handle_fuse_requests(handler);
1596:system/core/sdcard/sdcard.c **** return NULL;
1597:system/core/sdcard/sdcard.c **** }
1598:system/core/sdcard/sdcard.c ****
1599:system/core/sdcard/sdcard.c **** static bool remove_str_to_int(void *key, void *value, void *context) {
1600:system/core/sdcard/sdcard.c **** Hashmap* map = context;
1601:system/core/sdcard/sdcard.c **** hashmapRemove(map, key);
1602:system/core/sdcard/sdcard.c **** free(key);
1603:system/core/sdcard/sdcard.c **** return true;
1604:system/core/sdcard/sdcard.c **** }
1605:system/core/sdcard/sdcard.c ****
1606:system/core/sdcard/sdcard.c **** static bool remove_int_to_null(void *key, void *value, void *context) {
1607:system/core/sdcard/sdcard.c **** Hashmap* map = context;
1608:system/core/sdcard/sdcard.c **** hashmapRemove(map, key);
1609:system/core/sdcard/sdcard.c **** return true;
1610:system/core/sdcard/sdcard.c **** }
1611:system/core/sdcard/sdcard.c ****
1612:system/core/sdcard/sdcard.c **** static int read_package_list(struct fuse *fuse) {
1613:system/core/sdcard/sdcard.c **** pthread_mutex_lock(&fuse->lock);
1614:system/core/sdcard/sdcard.c ****
1615:system/core/sdcard/sdcard.c **** hashmapForEach(fuse->package_to_appid, remove_str_to_int, fuse->package_to_appid);
1616:system/core/sdcard/sdcard.c **** hashmapForEach(fuse->appid_with_rw, remove_int_to_null, fuse->appid_with_rw);
1617:system/core/sdcard/sdcard.c ****
1618:system/core/sdcard/sdcard.c **** FILE* file = fopen(kPackagesListFile, "r");
1619:system/core/sdcard/sdcard.c **** if (!file) {
1620:system/core/sdcard/sdcard.c **** ERROR("failed to open package list: %s\n", strerror(errno));
1621:system/core/sdcard/sdcard.c **** pthread_mutex_unlock(&fuse->lock);
1622:system/core/sdcard/sdcard.c **** return -1;
1623:system/core/sdcard/sdcard.c **** }
1624:system/core/sdcard/sdcard.c ****
1625:system/core/sdcard/sdcard.c **** char buf[512];
1626:system/core/sdcard/sdcard.c **** while (fgets(buf, sizeof(buf), file) != NULL) {
1627:system/core/sdcard/sdcard.c **** char package_name[512];
1628:system/core/sdcard/sdcard.c **** int appid;
1629:system/core/sdcard/sdcard.c **** char gids[512];
1630:system/core/sdcard/sdcard.c ****
1631:system/core/sdcard/sdcard.c **** if (sscanf(buf, "%s %d %*d %*s %*s %s", package_name, &appid, gids) == 3) {
1632:system/core/sdcard/sdcard.c **** char* package_name_dup = strdup(package_name);
1633:system/core/sdcard/sdcard.c **** hashmapPut(fuse->package_to_appid, package_name_dup, (void*) appid);
1634:system/core/sdcard/sdcard.c ****
1635:system/core/sdcard/sdcard.c **** char* token = strtok(gids, ",");
1636:system/core/sdcard/sdcard.c **** while (token != NULL) {
1637:system/core/sdcard/sdcard.c **** if (strtoul(token, NULL, 10) == fuse->write_gid) {
1638:system/core/sdcard/sdcard.c **** hashmapPut(fuse->appid_with_rw, (void*) appid, (void*) 1);
1639:system/core/sdcard/sdcard.c **** break;
1640:system/core/sdcard/sdcard.c **** }
1641:system/core/sdcard/sdcard.c **** token = strtok(NULL, ",");
1642:system/core/sdcard/sdcard.c **** }
1643:system/core/sdcard/sdcard.c **** }
1644:system/core/sdcard/sdcard.c **** }
ARM GAS /tmp/cc3I8rcL.s page 31
1645:system/core/sdcard/sdcard.c ****
1646:system/core/sdcard/sdcard.c **** TRACE("read_package_list: found %d packages, %d with write_gid\n",
1647:system/core/sdcard/sdcard.c **** hashmapSize(fuse->package_to_appid),
1648:system/core/sdcard/sdcard.c **** hashmapSize(fuse->appid_with_rw));
1649:system/core/sdcard/sdcard.c **** fclose(file);
1650:system/core/sdcard/sdcard.c **** pthread_mutex_unlock(&fuse->lock);
1651:system/core/sdcard/sdcard.c **** return 0;
1652:system/core/sdcard/sdcard.c **** }
1653:system/core/sdcard/sdcard.c ****
1654:system/core/sdcard/sdcard.c **** static void watch_package_list(struct fuse* fuse) {
1655:system/core/sdcard/sdcard.c **** struct inotify_event *event;
1656:system/core/sdcard/sdcard.c **** char event_buf[512];
1657:system/core/sdcard/sdcard.c ****
1658:system/core/sdcard/sdcard.c **** int nfd = inotify_init();
1659:system/core/sdcard/sdcard.c **** if (nfd < 0) {
1660:system/core/sdcard/sdcard.c **** ERROR("inotify_init failed: %s\n", strerror(errno));
1661:system/core/sdcard/sdcard.c **** return;
1662:system/core/sdcard/sdcard.c **** }
1663:system/core/sdcard/sdcard.c ****
1664:system/core/sdcard/sdcard.c **** bool active = false;
1665:system/core/sdcard/sdcard.c **** while (1) {
1666:system/core/sdcard/sdcard.c **** if (!active) {
1667:system/core/sdcard/sdcard.c **** int res = inotify_add_watch(nfd, kPackagesListFile, IN_DELETE_SELF);
1668:system/core/sdcard/sdcard.c **** if (res == -1) {
1669:system/core/sdcard/sdcard.c **** if (errno == ENOENT || errno == EACCES) {
1670:system/core/sdcard/sdcard.c **** /* Framework may not have created yet, sleep and retry */
1671:system/core/sdcard/sdcard.c **** ERROR("missing packages.list; retrying\n");
1672:system/core/sdcard/sdcard.c **** sleep(3);
1673:system/core/sdcard/sdcard.c **** continue;
1674:system/core/sdcard/sdcard.c **** } else {
1675:system/core/sdcard/sdcard.c **** ERROR("inotify_add_watch failed: %s\n", strerror(errno));
1676:system/core/sdcard/sdcard.c **** return;
1677:system/core/sdcard/sdcard.c **** }
1678:system/core/sdcard/sdcard.c **** }
1679:system/core/sdcard/sdcard.c ****
1680:system/core/sdcard/sdcard.c **** /* Watch above will tell us about any future changes, so
1681:system/core/sdcard/sdcard.c **** * read the current state. */
1682:system/core/sdcard/sdcard.c **** if (read_package_list(fuse) == -1) {
1683:system/core/sdcard/sdcard.c **** ERROR("read_package_list failed: %s\n", strerror(errno));
1684:system/core/sdcard/sdcard.c **** return;
1685:system/core/sdcard/sdcard.c **** }
1686:system/core/sdcard/sdcard.c **** active = true;
1687:system/core/sdcard/sdcard.c **** }
1688:system/core/sdcard/sdcard.c ****
1689:system/core/sdcard/sdcard.c **** int event_pos = 0;
1690:system/core/sdcard/sdcard.c **** int res = read(nfd, event_buf, sizeof(event_buf));
1691:system/core/sdcard/sdcard.c **** if (res < (int) sizeof(*event)) {
1692:system/core/sdcard/sdcard.c **** if (errno == EINTR)
1693:system/core/sdcard/sdcard.c **** continue;
1694:system/core/sdcard/sdcard.c **** ERROR("failed to read inotify event: %s\n", strerror(errno));
1695:system/core/sdcard/sdcard.c **** return;
1696:system/core/sdcard/sdcard.c **** }
1697:system/core/sdcard/sdcard.c ****
1698:system/core/sdcard/sdcard.c **** while (res >= (int) sizeof(*event)) {
1699:system/core/sdcard/sdcard.c **** int event_size;
1700:system/core/sdcard/sdcard.c **** event = (struct inotify_event *) (event_buf + event_pos);
1701:system/core/sdcard/sdcard.c ****
ARM GAS /tmp/cc3I8rcL.s page 32
1702:system/core/sdcard/sdcard.c **** TRACE("inotify event: %08x\n", event->mask);
1703:system/core/sdcard/sdcard.c **** if ((event->mask & IN_IGNORED) == IN_IGNORED) {
1704:system/core/sdcard/sdcard.c **** /* Previously watched file was deleted, probably due to move
1705:system/core/sdcard/sdcard.c **** * that swapped in new data; re-arm the watch and read. */
1706:system/core/sdcard/sdcard.c **** active = false;
1707:system/core/sdcard/sdcard.c **** }
1708:system/core/sdcard/sdcard.c ****
1709:system/core/sdcard/sdcard.c **** event_size = sizeof(*event) + event->len;
1710:system/core/sdcard/sdcard.c **** res -= event_size;
1711:system/core/sdcard/sdcard.c **** event_pos += event_size;
1712:system/core/sdcard/sdcard.c **** }
1713:system/core/sdcard/sdcard.c **** }
1714:system/core/sdcard/sdcard.c **** }
1715:system/core/sdcard/sdcard.c ****
1716:system/core/sdcard/sdcard.c **** static int ignite_fuse(struct fuse* fuse, int num_threads)
1717:system/core/sdcard/sdcard.c **** {
1718:system/core/sdcard/sdcard.c **** struct fuse_handler* handlers;
1719:system/core/sdcard/sdcard.c **** int i;
1720:system/core/sdcard/sdcard.c ****
1721:system/core/sdcard/sdcard.c **** handlers = malloc(num_threads * sizeof(struct fuse_handler));
1722:system/core/sdcard/sdcard.c **** if (!handlers) {
1723:system/core/sdcard/sdcard.c **** ERROR("cannot allocate storage for threads\n");
1724:system/core/sdcard/sdcard.c **** return -ENOMEM;
1725:system/core/sdcard/sdcard.c **** }
1726:system/core/sdcard/sdcard.c ****
1727:system/core/sdcard/sdcard.c **** for (i = 0; i < num_threads; i++) {
1728:system/core/sdcard/sdcard.c **** handlers[i].fuse = fuse;
1729:system/core/sdcard/sdcard.c **** handlers[i].token = i;
1730:system/core/sdcard/sdcard.c **** }
1731:system/core/sdcard/sdcard.c ****
1732:system/core/sdcard/sdcard.c **** /* When deriving permissions, this thread is used to process inotify events,
1733:system/core/sdcard/sdcard.c **** * otherwise it becomes one of the FUSE handlers. */
1734:system/core/sdcard/sdcard.c **** i = (fuse->derive == DERIVE_NONE) ? 1 : 0;
1735:system/core/sdcard/sdcard.c **** for (; i < num_threads; i++) {
1736:system/core/sdcard/sdcard.c **** pthread_t thread;
1737:system/core/sdcard/sdcard.c **** int res = pthread_create(&thread, NULL, start_handler, &handlers[i]);
1738:system/core/sdcard/sdcard.c **** if (res) {
1739:system/core/sdcard/sdcard.c **** ERROR("failed to start thread #%d, error=%d\n", i, res);
1740:system/core/sdcard/sdcard.c **** goto quit;
1741:system/core/sdcard/sdcard.c **** }
1742:system/core/sdcard/sdcard.c **** }
1743:system/core/sdcard/sdcard.c ****
1744:system/core/sdcard/sdcard.c **** if (fuse->derive == DERIVE_NONE) {
1745:system/core/sdcard/sdcard.c **** handle_fuse_requests(&handlers[0]);
1746:system/core/sdcard/sdcard.c **** } else {
1747:system/core/sdcard/sdcard.c **** watch_package_list(fuse);
1748:system/core/sdcard/sdcard.c **** }
1749:system/core/sdcard/sdcard.c ****
1750:system/core/sdcard/sdcard.c **** ERROR("terminated prematurely\n");
1751:system/core/sdcard/sdcard.c ****
1752:system/core/sdcard/sdcard.c **** /* don't bother killing all of the other threads or freeing anything,
1753:system/core/sdcard/sdcard.c **** * should never get here anyhow */
1754:system/core/sdcard/sdcard.c **** quit:
1755:system/core/sdcard/sdcard.c **** exit(1);
1756:system/core/sdcard/sdcard.c **** }
1757:system/core/sdcard/sdcard.c ****
1758:system/core/sdcard/sdcard.c **** static int usage()
ARM GAS /tmp/cc3I8rcL.s page 33
1759:system/core/sdcard/sdcard.c **** {
72 .loc 1 1759 0
73 .cfi_startproc
74 @ args = 0, pretend = 0, frame = 0
75 @ frame_needed = 0, uses_anonymous_args = 0
76 0000 08B5 push {r3, lr}
77 .save {r3, lr}
78 .LCFI0:
79 .cfi_def_cfa_offset 8
80 .cfi_offset 3, -8
81 .cfi_offset 14, -4
82 .loc 1 1759 0
83 0002 064B ldr r3, .L4
1760:system/core/sdcard/sdcard.c **** ERROR("usage: sdcard [OPTIONS] <source_path> <dest_path>\n"
84 .loc 1 1760 0
85 0004 064A ldr r2, .L4+4
86 0006 0749 ldr r1, .L4+8
1759:system/core/sdcard/sdcard.c **** {
87 .loc 1 1759 0
88 .LPIC0:
89 0008 7B44 add r3, pc
90 .loc 1 1760 0
91 000a 9858 ldr r0, [r3, r2]
92 000c 0222 movs r2, #2
93 .LPIC1:
94 000e 7944 add r1, pc
95 0010 A830 adds r0, r0, #168
96 0012 FFF7FEFF bl fprintf(PLT)
97 .LVL3:
1761:system/core/sdcard/sdcard.c **** " -u: specify UID to run as\n"
1762:system/core/sdcard/sdcard.c **** " -g: specify GID to run as\n"
1763:system/core/sdcard/sdcard.c **** " -w: specify GID required to write (default sdcard_rw)\n"
1764:system/core/sdcard/sdcard.c **** " -t: specify number of threads to use (default %d)\n"
1765:system/core/sdcard/sdcard.c **** " -d: derive file permissions based on path\n"
1766:system/core/sdcard/sdcard.c **** " -l: derive file permissions based on legacy internal layout\n"
1767:system/core/sdcard/sdcard.c **** " -s: split derived permissions for pics, av (requires -d or -l)\n"
1768:system/core/sdcard/sdcard.c **** "\n", DEFAULT_NUM_THREADS);
1769:system/core/sdcard/sdcard.c **** return 1;
1770:system/core/sdcard/sdcard.c **** }
98 .loc 1 1770 0
99 0016 0120 movs r0, #1
100 0018 08BD pop {r3, pc}
101 .L5:
102 001a 00BF .align 2
103 .L4:
104 001c 10000000 .word _GLOBAL_OFFSET_TABLE_-(.LPIC0+4)
105 0020 00000000 .word __sF(GOT)
106 0024 12000000 .word .LC0-(.LPIC1+4)
107 .cfi_endproc
108 .LFE118:
109 .fnend
111 .section .text.str_icase_equals,"ax",%progbits
112 .align 1
113 .thumb
114 .thumb_func
116 str_icase_equals:
117 .fnstart
ARM GAS /tmp/cc3I8rcL.s page 34
118 .LFB61:
198:system/core/sdcard/sdcard.c **** static bool str_icase_equals(void *keyA, void *keyB) {
119 .loc 1 198 0
120 .cfi_startproc
121 @ args = 0, pretend = 0, frame = 0
122 @ frame_needed = 0, uses_anonymous_args = 0
123 .LVL4:
124 0000 08B5 push {r3, lr}
125 .save {r3, lr}
126 .LCFI1:
127 .cfi_def_cfa_offset 8
128 .cfi_offset 3, -8
129 .cfi_offset 14, -4
199:system/core/sdcard/sdcard.c **** return strcasecmp(keyA, keyB) == 0;
130 .loc 1 199 0
131 0002 FFF7FEFF bl strcasecmp(PLT)
132 .LVL5:
200:system/core/sdcard/sdcard.c **** }
133 .loc 1 200 0
134 0006 D0F10100 rsbs r0, r0, #1
135 000a 38BF it cc
136 000c 0020 movcc r0, #0
137 000e 08BD pop {r3, pc}
138 .cfi_endproc
139 .LFE61:
140 .fnend
142 .section .text.str_hash,"ax",%progbits
143 .align 1
144 .thumb
145 .thumb_func
147 str_hash:
148 .fnstart
149 .LFB60:
193:system/core/sdcard/sdcard.c **** static int str_hash(void *key) {
150 .loc 1 193 0
151 .cfi_startproc
152 @ args = 0, pretend = 0, frame = 0
153 @ frame_needed = 0, uses_anonymous_args = 0
154 .LVL6:
155 0000 10B5 push {r4, lr}
156 .save {r4, lr}
157 .LCFI2:
158 .cfi_def_cfa_offset 8
159 .cfi_offset 4, -8
160 .cfi_offset 14, -4
193:system/core/sdcard/sdcard.c **** static int str_hash(void *key) {
161 .loc 1 193 0
162 0002 0446 mov r4, r0
163 .LVL7:
164 .LBB222:
165 .LBB223:
166 .file 2 "bionic/libc/include/string.h"
1:bionic/libc/include/string.h **** /*
2:bionic/libc/include/string.h **** * Copyright (C) 2008 The Android Open Source Project
3:bionic/libc/include/string.h **** * All rights reserved.
4:bionic/libc/include/string.h **** *
5:bionic/libc/include/string.h **** * Redistribution and use in source and binary forms, with or without
ARM GAS /tmp/cc3I8rcL.s page 35
6:bionic/libc/include/string.h **** * modification, are permitted provided that the following conditions
7:bionic/libc/include/string.h **** * are met:
8:bionic/libc/include/string.h **** * * Redistributions of source code must retain the above copyright
9:bionic/libc/include/string.h **** * notice, this list of conditions and the following disclaimer.
10:bionic/libc/include/string.h **** * * Redistributions in binary form must reproduce the above copyright
11:bionic/libc/include/string.h **** * notice, this list of conditions and the following disclaimer in
12:bionic/libc/include/string.h **** * the documentation and/or other materials provided with the
13:bionic/libc/include/string.h **** * distribution.
14:bionic/libc/include/string.h **** *
15:bionic/libc/include/string.h **** * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
16:bionic/libc/include/string.h **** * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
17:bionic/libc/include/string.h **** * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
18:bionic/libc/include/string.h **** * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
19:bionic/libc/include/string.h **** * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
20:bionic/libc/include/string.h **** * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
21:bionic/libc/include/string.h **** * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
22:bionic/libc/include/string.h **** * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
23:bionic/libc/include/string.h **** * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
24:bionic/libc/include/string.h **** * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
25:bionic/libc/include/string.h **** * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
26:bionic/libc/include/string.h **** * SUCH DAMAGE.
27:bionic/libc/include/string.h **** */
28:bionic/libc/include/string.h **** #ifndef _STRING_H_
29:bionic/libc/include/string.h **** #define _STRING_H_
30:bionic/libc/include/string.h ****
31:bionic/libc/include/string.h **** #include <sys/cdefs.h>
32:bionic/libc/include/string.h **** #include <stddef.h>
33:bionic/libc/include/string.h **** #include <malloc.h>
34:bionic/libc/include/string.h ****
35:bionic/libc/include/string.h **** __BEGIN_DECLS
36:bionic/libc/include/string.h ****
37:bionic/libc/include/string.h **** extern void* memccpy(void* __restrict, const void* __restrict, int, size_t);
38:bionic/libc/include/string.h **** extern void* memchr(const void *, int, size_t) __purefunc;
39:bionic/libc/include/string.h **** extern void* memrchr(const void *, int, size_t) __purefunc;
40:bionic/libc/include/string.h **** extern int memcmp(const void *, const void *, size_t) __purefunc;
41:bionic/libc/include/string.h **** extern void* memcpy(void* __restrict, const void* __restrict, size_t);
42:bionic/libc/include/string.h **** extern void* memmove(void *, const void *, size_t);
43:bionic/libc/include/string.h **** extern void* memset(void *, int, size_t);
44:bionic/libc/include/string.h **** extern void* memmem(const void *, size_t, const void *, size_t) __purefunc;
45:bionic/libc/include/string.h **** extern void memswap(void *, void *, size_t);
46:bionic/libc/include/string.h ****
47:bionic/libc/include/string.h **** extern char* index(const char *, int) __purefunc;
48:bionic/libc/include/string.h **** extern char* strchr(const char *, int) __purefunc;
49:bionic/libc/include/string.h **** extern char* strrchr(const char *, int) __purefunc;
50:bionic/libc/include/string.h ****
51:bionic/libc/include/string.h **** extern size_t strlen(const char *) __purefunc;
52:bionic/libc/include/string.h **** extern size_t __strlen_chk(const char *, size_t);
53:bionic/libc/include/string.h **** extern int strcmp(const char *, const char *) __purefunc;
54:bionic/libc/include/string.h **** extern char* strcpy(char* __restrict, const char* __restrict);
55:bionic/libc/include/string.h **** extern char* strcat(char* __restrict, const char* __restrict);
56:bionic/libc/include/string.h ****
57:bionic/libc/include/string.h **** extern int strcasecmp(const char *, const char *) __purefunc;
58:bionic/libc/include/string.h **** extern int strncasecmp(const char *, const char *, size_t) __purefunc;
59:bionic/libc/include/string.h **** extern char* strdup(const char *);
60:bionic/libc/include/string.h ****
61:bionic/libc/include/string.h **** extern char* strstr(const char *, const char *) __purefunc;
62:bionic/libc/include/string.h **** extern char* strcasestr(const char *haystack, const char *needle) __purefunc;
ARM GAS /tmp/cc3I8rcL.s page 36
63:bionic/libc/include/string.h **** extern char* strtok(char* __restrict, const char* __restrict);
64:bionic/libc/include/string.h **** extern char* strtok_r(char* __restrict, const char* __restrict, char** __restrict);
65:bionic/libc/include/string.h ****
66:bionic/libc/include/string.h **** extern char* strerror(int);
67:bionic/libc/include/string.h **** extern int strerror_r(int errnum, char *buf, size_t n);
68:bionic/libc/include/string.h ****
69:bionic/libc/include/string.h **** extern size_t strnlen(const char *, size_t) __purefunc;
70:bionic/libc/include/string.h **** extern char* strncat(char* __restrict, const char* __restrict, size_t);
71:bionic/libc/include/string.h **** extern char* strndup(const char *, size_t);
72:bionic/libc/include/string.h **** extern int strncmp(const char *, const char *, size_t) __purefunc;
73:bionic/libc/include/string.h **** extern char* strncpy(char* __restrict, const char* __restrict, size_t);
74:bionic/libc/include/string.h ****
75:bionic/libc/include/string.h **** extern size_t strlcat(char* __restrict, const char* __restrict, size_t);
76:bionic/libc/include/string.h **** extern size_t strlcpy(char* __restrict, const char* __restrict, size_t);
77:bionic/libc/include/string.h ****
78:bionic/libc/include/string.h **** extern size_t strcspn(const char *, const char *) __purefunc;
79:bionic/libc/include/string.h **** extern char* strpbrk(const char *, const char *) __purefunc;
80:bionic/libc/include/string.h **** extern char* strsep(char** __restrict, const char* __restrict);
81:bionic/libc/include/string.h **** extern size_t strspn(const char *, const char *);
82:bionic/libc/include/string.h ****
83:bionic/libc/include/string.h **** extern char* strsignal(int sig);
84:bionic/libc/include/string.h ****
85:bionic/libc/include/string.h **** extern int strcoll(const char *, const char *) __purefunc;
86:bionic/libc/include/string.h **** extern size_t strxfrm(char* __restrict, const char* __restrict, size_t);
87:bionic/libc/include/string.h ****
88:bionic/libc/include/string.h **** #if defined(__BIONIC_FORTIFY)
89:bionic/libc/include/string.h ****
90:bionic/libc/include/string.h **** __errordecl(__memcpy_dest_size_error, "memcpy called with size bigger than destination");
91:bionic/libc/include/string.h **** __errordecl(__memcpy_src_size_error, "memcpy called with size bigger than source");
92:bionic/libc/include/string.h ****
93:bionic/libc/include/string.h **** __BIONIC_FORTIFY_INLINE
94:bionic/libc/include/string.h **** void* memcpy(void* __restrict dest, const void* __restrict src, size_t copy_amount) {
95:bionic/libc/include/string.h **** char *d = (char *) dest;
96:bionic/libc/include/string.h **** const char *s = (const char *) src;
97:bionic/libc/include/string.h **** size_t s_len = __builtin_object_size(s, 0);
98:bionic/libc/include/string.h **** size_t d_len = __builtin_object_size(d, 0);
99:bionic/libc/include/string.h ****
100:bionic/libc/include/string.h **** if (__builtin_constant_p(copy_amount) && (copy_amount > d_len)) {
101:bionic/libc/include/string.h **** __memcpy_dest_size_error();
102:bionic/libc/include/string.h **** }
103:bionic/libc/include/string.h ****
104:bionic/libc/include/string.h **** if (__builtin_constant_p(copy_amount) && (copy_amount > s_len)) {
105:bionic/libc/include/string.h **** __memcpy_src_size_error();
106:bionic/libc/include/string.h **** }
107:bionic/libc/include/string.h ****
108:bionic/libc/include/string.h **** return __builtin___memcpy_chk(dest, src, copy_amount, d_len);
109:bionic/libc/include/string.h **** }
110:bionic/libc/include/string.h ****
111:bionic/libc/include/string.h **** __BIONIC_FORTIFY_INLINE
112:bionic/libc/include/string.h **** void* memmove(void *dest, const void *src, size_t len) {
113:bionic/libc/include/string.h **** return __builtin___memmove_chk(dest, src, len, __builtin_object_size (dest, 0));
114:bionic/libc/include/string.h **** }
115:bionic/libc/include/string.h ****
116:bionic/libc/include/string.h **** __BIONIC_FORTIFY_INLINE
117:bionic/libc/include/string.h **** char* strcpy(char* __restrict dest, const char* __restrict src) {
118:bionic/libc/include/string.h **** return __builtin___strcpy_chk(dest, src, __bos(dest));
119:bionic/libc/include/string.h **** }
ARM GAS /tmp/cc3I8rcL.s page 37
120:bionic/libc/include/string.h ****
121:bionic/libc/include/string.h **** __errordecl(__strncpy_error, "strncpy called with size bigger than buffer");
122:bionic/libc/include/string.h ****
123:bionic/libc/include/string.h **** __BIONIC_FORTIFY_INLINE
124:bionic/libc/include/string.h **** char* strncpy(char* __restrict dest, const char* __restrict src, size_t n) {
125:bionic/libc/include/string.h **** size_t bos = __bos(dest);
126:bionic/libc/include/string.h **** if (__builtin_constant_p(n) && (n > bos)) {
127:bionic/libc/include/string.h **** __strncpy_error();
128:bionic/libc/include/string.h **** }
129:bionic/libc/include/string.h **** return __builtin___strncpy_chk(dest, src, n, bos);
130:bionic/libc/include/string.h **** }
131:bionic/libc/include/string.h ****
132:bionic/libc/include/string.h **** __BIONIC_FORTIFY_INLINE
133:bionic/libc/include/string.h **** char* strcat(char* __restrict dest, const char* __restrict src) {
134:bionic/libc/include/string.h **** return __builtin___strcat_chk(dest, src, __bos(dest));
135:bionic/libc/include/string.h **** }
136:bionic/libc/include/string.h ****
137:bionic/libc/include/string.h **** __BIONIC_FORTIFY_INLINE
138:bionic/libc/include/string.h **** char *strncat(char* __restrict dest, const char* __restrict src, size_t n) {
139:bionic/libc/include/string.h **** return __builtin___strncat_chk(dest, src, n, __bos(dest));
140:bionic/libc/include/string.h **** }
141:bionic/libc/include/string.h ****
142:bionic/libc/include/string.h **** __BIONIC_FORTIFY_INLINE
143:bionic/libc/include/string.h **** void* memset(void *s, int c, size_t n) {
144:bionic/libc/include/string.h **** return __builtin___memset_chk(s, c, n, __builtin_object_size (s, 0));
145:bionic/libc/include/string.h **** }
146:bionic/libc/include/string.h ****
147:bionic/libc/include/string.h **** extern size_t __strlcpy_real(char* __restrict, const char* __restrict, size_t)
148:bionic/libc/include/string.h **** __asm__(__USER_LABEL_PREFIX__ "strlcpy");
149:bionic/libc/include/string.h **** __errordecl(__strlcpy_error, "strlcpy called with size bigger than buffer");
150:bionic/libc/include/string.h **** extern size_t __strlcpy_chk(char *, const char *, size_t, size_t);
151:bionic/libc/include/string.h ****
152:bionic/libc/include/string.h **** __BIONIC_FORTIFY_INLINE
153:bionic/libc/include/string.h **** size_t strlcpy(char* __restrict dest, const char* __restrict src, size_t size) {
154:bionic/libc/include/string.h **** size_t bos = __bos(dest);
155:bionic/libc/include/string.h ****
156:bionic/libc/include/string.h **** #if !defined(__clang__)
157:bionic/libc/include/string.h **** // Compiler doesn't know destination size. Don't call __strlcpy_chk
158:bionic/libc/include/string.h **** if (bos == __BIONIC_FORTIFY_UNKNOWN_SIZE) {
159:bionic/libc/include/string.h **** return __strlcpy_real(dest, src, size);
160:bionic/libc/include/string.h **** }
161:bionic/libc/include/string.h ****
162:bionic/libc/include/string.h **** // Compiler can prove, at compile time, that the passed in size
163:bionic/libc/include/string.h **** // is always <= the actual object size. Don't call __strlcpy_chk
164:bionic/libc/include/string.h **** if (__builtin_constant_p(size) && (size <= bos)) {
165:bionic/libc/include/string.h **** return __strlcpy_real(dest, src, size);
166:bionic/libc/include/string.h **** }
167:bionic/libc/include/string.h ****
168:bionic/libc/include/string.h **** // Compiler can prove, at compile time, that the passed in size
169:bionic/libc/include/string.h **** // is always > the actual object size. Force a compiler error.
170:bionic/libc/include/string.h **** if (__builtin_constant_p(size) && (size > bos)) {
171:bionic/libc/include/string.h **** __strlcpy_error();
172:bionic/libc/include/string.h **** }
173:bionic/libc/include/string.h **** #endif /* !defined(__clang__) */
174:bionic/libc/include/string.h ****
175:bionic/libc/include/string.h **** return __strlcpy_chk(dest, src, size, bos);
176:bionic/libc/include/string.h **** }
ARM GAS /tmp/cc3I8rcL.s page 38
177:bionic/libc/include/string.h ****
178:bionic/libc/include/string.h **** extern size_t __strlcat_real(char* __restrict, const char* __restrict, size_t)
179:bionic/libc/include/string.h **** __asm__(__USER_LABEL_PREFIX__ "strlcat");
180:bionic/libc/include/string.h **** __errordecl(__strlcat_error, "strlcat called with size bigger than buffer");
181:bionic/libc/include/string.h **** extern size_t __strlcat_chk(char* __restrict, const char* __restrict, size_t, size_t);
182:bionic/libc/include/string.h ****
183:bionic/libc/include/string.h ****
184:bionic/libc/include/string.h **** __BIONIC_FORTIFY_INLINE
185:bionic/libc/include/string.h **** size_t strlcat(char* __restrict dest, const char* __restrict src, size_t size) {
186:bionic/libc/include/string.h **** size_t bos = __bos(dest);
187:bionic/libc/include/string.h ****
188:bionic/libc/include/string.h **** #if !defined(__clang__)
189:bionic/libc/include/string.h **** // Compiler doesn't know destination size. Don't call __strlcat_chk
190:bionic/libc/include/string.h **** if (bos == __BIONIC_FORTIFY_UNKNOWN_SIZE) {
191:bionic/libc/include/string.h **** return __strlcat_real(dest, src, size);
192:bionic/libc/include/string.h **** }
193:bionic/libc/include/string.h ****
194:bionic/libc/include/string.h **** // Compiler can prove, at compile time, that the passed in size
195:bionic/libc/include/string.h **** // is always <= the actual object size. Don't call __strlcat_chk
196:bionic/libc/include/string.h **** if (__builtin_constant_p(size) && (size <= bos)) {
197:bionic/libc/include/string.h **** return __strlcat_real(dest, src, size);
198:bionic/libc/include/string.h **** }
199:bionic/libc/include/string.h ****
200:bionic/libc/include/string.h **** // Compiler can prove, at compile time, that the passed in size
201:bionic/libc/include/string.h **** // is always > the actual object size. Force a compiler error.
202:bionic/libc/include/string.h **** if (__builtin_constant_p(size) && (size > bos)) {
203:bionic/libc/include/string.h **** __strlcat_error();
204:bionic/libc/include/string.h **** }
205:bionic/libc/include/string.h **** #endif /* !defined(__clang__) */
206:bionic/libc/include/string.h ****
207:bionic/libc/include/string.h **** return __strlcat_chk(dest, src, size, bos);
208:bionic/libc/include/string.h **** }
209:bionic/libc/include/string.h ****
210:bionic/libc/include/string.h **** __BIONIC_FORTIFY_INLINE
211:bionic/libc/include/string.h **** size_t strlen(const char *s) {
212:bionic/libc/include/string.h **** size_t bos = __bos(s);
213:bionic/libc/include/string.h ****
214:bionic/libc/include/string.h **** #if !defined(__clang__)
215:bionic/libc/include/string.h **** // Compiler doesn't know destination size. Don't call __strlen_chk
216:bionic/libc/include/string.h **** if (bos == __BIONIC_FORTIFY_UNKNOWN_SIZE) {
217:bionic/libc/include/string.h **** return __builtin_strlen(s);
167 .loc 2 217 0
168 0004 FFF7FEFF bl strlen(PLT)
169 .LVL8:
170 0008 0146 mov r1, r0
171 .LBE223:
172 .LBE222:
194:system/core/sdcard/sdcard.c **** return hashmapHash(key, strlen(key));
173 .loc 1 194 0
174 000a 2046 mov r0, r4
195:system/core/sdcard/sdcard.c **** }
175 .loc 1 195 0
176 000c BDE81040 pop {r4, lr}
194:system/core/sdcard/sdcard.c **** return hashmapHash(key, strlen(key));
177 .loc 1 194 0
178 0010 FFF7FEBF b hashmapHash(PLT)
179 .LVL9:
ARM GAS /tmp/cc3I8rcL.s page 39
180 .cfi_endproc
181 .LFE60:
182 .fnend
184 .section .text.get_node_path_locked,"ax",%progbits
185 .align 1
186 .thumb
187 .thumb_func
189 get_node_path_locked:
190 .fnstart
191 .LFB70:
308:system/core/sdcard/sdcard.c **** static ssize_t get_node_path_locked(struct node* node, char* buf, size_t bufsize) {
192 .loc 1 308 0
193 .cfi_startproc
194 @ args = 0, pretend = 0, frame = 0
195 @ frame_needed = 0, uses_anonymous_args = 0
196 .LVL10:
197 0000 2DE9F041 push {r4, r5, r6, r7, r8, lr}
198 .save {r4, r5, r6, r7, r8, lr}
199 .LCFI3:
200 .cfi_def_cfa_offset 24
201 .cfi_offset 4, -24
202 .cfi_offset 5, -20
203 .cfi_offset 6, -16
204 .cfi_offset 7, -12
205 .cfi_offset 8, -8
206 .cfi_offset 14, -4
308:system/core/sdcard/sdcard.c **** static ssize_t get_node_path_locked(struct node* node, char* buf, size_t bufsize) {
207 .loc 1 308 0
208 0004 0F46 mov r7, r1
311:system/core/sdcard/sdcard.c **** if (node->graft_path) {
209 .loc 1 311 0
210 0006 436C ldr r3, [r0, #68]
211 0008 13B1 cbz r3, .L9
212 .LVL11:
313:system/core/sdcard/sdcard.c **** namelen = node->graft_pathlen;
213 .loc 1 313 0
214 000a 846C ldr r4, [r0, #72]
215 .LVL12:
216 000c 1E46 mov r6, r3
217 000e 03E0 b .L10
218 .LVL13:
219 .L9:
314:system/core/sdcard/sdcard.c **** } else if (node->actual_name) {
220 .loc 1 314 0
221 0010 066C ldr r6, [r0, #64]
222 0012 846B ldr r4, [r0, #56]
223 0014 06B9 cbnz r6, .L10
318:system/core/sdcard/sdcard.c **** name = node->name;
224 .loc 1 318 0
225 0016 C66B ldr r6, [r0, #60]
226 .LVL14:
227 .L10:
322:system/core/sdcard/sdcard.c **** if (bufsize < namelen + 1) {
228 .loc 1 322 0
229 0018 04F10108 add r8, r4, #1
230 001c 4245 cmp r2, r8
231 001e 03D2 bcs .L12
ARM GAS /tmp/cc3I8rcL.s page 40
232 .LVL15:
233 .L15:
323:system/core/sdcard/sdcard.c **** return -1;
234 .loc 1 323 0
235 0020 4FF0FF30 mov r0, #-1
236 0024 BDE8F081 pop {r4, r5, r6, r7, r8, pc}
237 .LVL16:
238 .L12:
327:system/core/sdcard/sdcard.c **** if (node->parent && node->graft_path == NULL) {
239 .loc 1 327 0
240 0028 406B ldr r0, [r0, #52]
241 .LVL17:
242 002a 58B1 cbz r0, .L16
327:system/core/sdcard/sdcard.c **** if (node->parent && node->graft_path == NULL) {
243 .loc 1 327 0 is_stmt 0 discriminator 1
244 002c 63B9 cbnz r3, .L17
328:system/core/sdcard/sdcard.c **** pathlen = get_node_path_locked(node->parent, buf, bufsize - namelen - 2);
245 .loc 1 328 0 is_stmt 1
246 002e 023A subs r2, r2, #2
247 .LVL18:
248 0030 3946 mov r1, r7
249 .LVL19:
250 0032 121B subs r2, r2, r4
251 .LVL20:
252 0034 FFF7E4FF bl get_node_path_locked(PLT)
253 .LVL21:
329:system/core/sdcard/sdcard.c **** if (pathlen < 0) {
254 .loc 1 329 0
255 0038 0028 cmp r0, #0
256 003a F1DB blt .L15
332:system/core/sdcard/sdcard.c **** buf[pathlen++] = '/';
257 .loc 1 332 0
258 003c 2F21 movs r1, #47
259 003e 451C adds r5, r0, #1
260 .LVL22:
261 0040 3954 strb r1, [r7, r0]
262 0042 02E0 b .L14
263 .LVL23:
264 .L16:
326:system/core/sdcard/sdcard.c **** ssize_t pathlen = 0;
265 .loc 1 326 0
266 0044 0546 mov r5, r0
267 0046 00E0 b .L14
268 .L17:
269 0048 0025 movs r5, #0
270 .LVL24:
271 .L14:
272 .LBB224:
273 .LBB225:
108:bionic/libc/include/string.h **** return __builtin___memcpy_chk(dest, src, copy_amount, d_len);
274 .loc 2 108 0
275 004a 7819 adds r0, r7, r5
276 .LVL25:
277 004c 3146 mov r1, r6
278 004e 4246 mov r2, r8
279 0050 FFF7FEFF bl memcpy(PLT)
280 .LVL26:
ARM GAS /tmp/cc3I8rcL.s page 41
281 .LBE225:
282 .LBE224:
336:system/core/sdcard/sdcard.c **** return pathlen + namelen;
283 .loc 1 336 0
284 0054 2819 adds r0, r5, r4
337:system/core/sdcard/sdcard.c **** }
285 .loc 1 337 0
286 0056 BDE8F081 pop {r4, r5, r6, r7, r8, pc}
287 .cfi_endproc
288 .LFE70:
289 .fnend
291 .section .text.remove_int_to_null,"ax",%progbits
292 .align 1
293 .thumb
294 .thumb_func
296 remove_int_to_null:
297 .fnstart
298 .LFB114:
1606:system/core/sdcard/sdcard.c **** static bool remove_int_to_null(void *key, void *value, void *context) {
299 .loc 1 1606 0
300 .cfi_startproc
301 @ args = 0, pretend = 0, frame = 0
302 @ frame_needed = 0, uses_anonymous_args = 0
303 .LVL27:
304 0000 0146 mov r1, r0
305 .LVL28:
306 0002 08B5 push {r3, lr}
307 .save {r3, lr}
308 .LCFI4:
309 .cfi_def_cfa_offset 8
310 .cfi_offset 3, -8
311 .cfi_offset 14, -4
1608:system/core/sdcard/sdcard.c **** hashmapRemove(map, key);
312 .loc 1 1608 0
313 0004 1046 mov r0, r2
314 .LVL29:
315 0006 FFF7FEFF bl hashmapRemove(PLT)
316 .LVL30:
1610:system/core/sdcard/sdcard.c **** }
317 .loc 1 1610 0
318 000a 0120 movs r0, #1
319 000c 08BD pop {r3, pc}
320 .cfi_endproc
321 .LFE114:
322 .fnend
324 .section .text.remove_str_to_int,"ax",%progbits
325 .align 1
326 .thumb
327 .thumb_func
329 remove_str_to_int:
330 .fnstart
331 .LFB113:
1599:system/core/sdcard/sdcard.c **** static bool remove_str_to_int(void *key, void *value, void *context) {
332 .loc 1 1599 0
333 .cfi_startproc
334 @ args = 0, pretend = 0, frame = 0
335 @ frame_needed = 0, uses_anonymous_args = 0
ARM GAS /tmp/cc3I8rcL.s page 42
336 .LVL31:
337 0000 10B5 push {r4, lr}
338 .save {r4, lr}
339 .LCFI5:
340 .cfi_def_cfa_offset 8
341 .cfi_offset 4, -8
342 .cfi_offset 14, -4
1599:system/core/sdcard/sdcard.c **** static bool remove_str_to_int(void *key, void *value, void *context) {
343 .loc 1 1599 0
344 0002 0446 mov r4, r0
1601:system/core/sdcard/sdcard.c **** hashmapRemove(map, key);
345 .loc 1 1601 0
346 0004 2146 mov r1, r4
347 .LVL32:
348 0006 1046 mov r0, r2
349 .LVL33:
350 0008 FFF7FEFF bl hashmapRemove(PLT)
351 .LVL34:
1602:system/core/sdcard/sdcard.c **** free(key);
352 .loc 1 1602 0
353 000c 2046 mov r0, r4
354 000e FFF7FEFF bl free(PLT)
355 .LVL35:
1604:system/core/sdcard/sdcard.c **** }
356 .loc 1 1604 0
357 0012 0120 movs r0, #1
358 0014 10BD pop {r4, pc}
359 .cfi_endproc
360 .LFE113:
361 .fnend
363 .section .text.check_caller_access_to_name,"ax",%progbits
364 .align 1
365 .thumb
366 .thumb_func
368 check_caller_access_to_name:
369 .fnstart
370 .LFB76:
522:system/core/sdcard/sdcard.c **** const char* name, int mode, bool has_rw) {
371 .loc 1 522 0
372 .cfi_startproc
373 @ args = 8, pretend = 0, frame = 0
374 @ frame_needed = 0, uses_anonymous_args = 0
375 .LVL36:
376 0000 2DE9F041 push {r4, r5, r6, r7, r8, lr}
377 .save {r4, r5, r6, r7, r8, lr}
378 .LCFI6:
379 .cfi_def_cfa_offset 24
380 .cfi_offset 4, -24
381 .cfi_offset 5, -20
382 .cfi_offset 6, -16
383 .cfi_offset 7, -12
384 .cfi_offset 8, -8
385 .cfi_offset 14, -4
522:system/core/sdcard/sdcard.c **** const char* name, int mode, bool has_rw) {
386 .loc 1 522 0
387 0004 8046 mov r8, r0
388 0006 0F46 mov r7, r1
ARM GAS /tmp/cc3I8rcL.s page 43
389 0008 1E46 mov r6, r3
390 000a 9DF81C40 ldrb r4, [sp, #28] @ zero_extendqisi2
524:system/core/sdcard/sdcard.c **** if (parent_node && parent_node->perm == PERM_ROOT) {
391 .loc 1 524 0
392 000e 1546 mov r5, r2
393 0010 A2B1 cbz r2, .L21
524:system/core/sdcard/sdcard.c **** if (parent_node && parent_node->perm == PERM_ROOT) {
394 .loc 1 524 0 is_stmt 0 discriminator 1
395 0012 9369 ldr r3, [r2, #24]
396 .LVL37:
397 0014 022B cmp r3, #2
398 0016 11D1 bne .L21
525:system/core/sdcard/sdcard.c **** if (!strcasecmp(name, "autorun.inf")
399 .loc 1 525 0 is_stmt 1
400 0018 1249 ldr r1, .L35
401 .LVL38:
402 001a 3046 mov r0, r6
403 .LVL39:
404 .LPIC2:
405 001c 7944 add r1, pc
406 001e FFF7FEFF bl strcasecmp(PLT)
407 .LVL40:
408 0022 C8B1 cbz r0, .L28
526:system/core/sdcard/sdcard.c **** || !strcasecmp(name, ".android_secure")
409 .loc 1 526 0
410 0024 1049 ldr r1, .L35+4
411 0026 3046 mov r0, r6
412 .LPIC3:
413 0028 7944 add r1, pc
414 002a FFF7FEFF bl strcasecmp(PLT)
415 .LVL41:
416 002e 98B1 cbz r0, .L28
527:system/core/sdcard/sdcard.c **** || !strcasecmp(name, "android_secure")) {
417 .loc 1 527 0
418 0030 0E49 ldr r1, .L35+8
419 0032 3046 mov r0, r6
420 .LPIC4:
421 0034 7944 add r1, pc
422 0036 FFF7FEFF bl strcasecmp(PLT)
423 .LVL42:
424 003a 68B1 cbz r0, .L28
425 .L21:
533:system/core/sdcard/sdcard.c **** if (fuse->derive == DERIVE_NONE) {
426 .loc 1 533 0
427 003c D8F81400 ldr r0, [r8, #20]
428 0040 60B1 cbz r0, .L29
429 .LVL43:
430 .LBB228:
431 .LBB229:
539:system/core/sdcard/sdcard.c **** if (hdr->uid == 0) {
432 .loc 1 539 0
433 0042 B969 ldr r1, [r7, #24]
434 0044 51B1 cbz r1, .L29
545:system/core/sdcard/sdcard.c **** if (mode & W_OK) {
435 .loc 1 545 0
436 0046 069A ldr r2, [sp, #24]
437 0048 9207 lsls r2, r2, #30
ARM GAS /tmp/cc3I8rcL.s page 44
438 004a 07D5 bpl .L29
546:system/core/sdcard/sdcard.c **** if (parent_node && hdr->uid == parent_node->uid) {
439 .loc 1 546 0
440 004c 3DB1 cbz r5, .L22
441 004e 2B6A ldr r3, [r5, #32]
540:system/core/sdcard/sdcard.c **** return true;
442 .loc 1 540 0
443 0050 9942 cmp r1, r3
444 0052 08BF it eq
445 0054 0124 moveq r4, #1
446 .LVL44:
447 0056 02E0 b .L22
448 .LVL45:
449 .L28:
450 .LBE229:
451 .LBE228:
528:system/core/sdcard/sdcard.c **** return false;
452 .loc 1 528 0
453 0058 0446 mov r4, r0
454 005a 00E0 b .L22
455 .L29:
534:system/core/sdcard/sdcard.c **** return true;
456 .loc 1 534 0
457 005c 0124 movs r4, #1
458 .L22:
555:system/core/sdcard/sdcard.c **** }
459 .loc 1 555 0
460 005e 2046 mov r0, r4
461 0060 BDE8F081 pop {r4, r5, r6, r7, r8, pc}
462 .L36:
463 .align 2
464 .L35:
465 0064 44000000 .word .LC1-(.LPIC2+4)
466 0068 3C000000 .word .LC2-(.LPIC3+4)
467 006c 34000000 .word .LC3-(.LPIC4+4)
468 .cfi_endproc
469 .LFE76:
470 .fnend
472 .section .text.fuse_reply,"ax",%progbits
473 .align 1
474 .thumb
475 .thumb_func
477 fuse_reply:
478 .fnstart
479 .LFB86:
746:system/core/sdcard/sdcard.c **** {
480 .loc 1 746 0
481 .cfi_startproc
482 @ args = 8, pretend = 0, frame = 32
483 @ frame_needed = 0, uses_anonymous_args = 0
484 .LVL46:
485 0000 30B5 push {r4, r5, lr}
486 .save {r4, r5, lr}
487 .LCFI7:
488 .cfi_def_cfa_offset 12
489 .cfi_offset 4, -12
490 .cfi_offset 5, -8
ARM GAS /tmp/cc3I8rcL.s page 45
491 .cfi_offset 14, -4
492 .pad #36
493 0002 89B0 sub sp, sp, #36
494 .LCFI8:
495 .cfi_def_cfa_offset 48
746:system/core/sdcard/sdcard.c **** {
496 .loc 1 746 0
497 0004 0D99 ldr r1, [sp, #52]
753:system/core/sdcard/sdcard.c **** hdr.unique = unique;
498 .loc 1 753 0
499 0006 CDE90223 strd r2, [sp, #8]
756:system/core/sdcard/sdcard.c **** vec[0].iov_len = sizeof(hdr);
500 .loc 1 756 0
501 000a 1022 movs r2, #16
502 .LVL47:
746:system/core/sdcard/sdcard.c **** {
503 .loc 1 746 0
504 000c 104C ldr r4, .L39
760:system/core/sdcard/sdcard.c **** res = writev(fuse->fd, vec, 2);
505 .loc 1 760 0
506 000e 0069 ldr r0, [r0, #16]
507 .LVL48:
756:system/core/sdcard/sdcard.c **** vec[0].iov_len = sizeof(hdr);
508 .loc 1 756 0
509 0010 0592 str r2, [sp, #20]
760:system/core/sdcard/sdcard.c **** res = writev(fuse->fd, vec, 2);
510 .loc 1 760 0
511 0012 0222 movs r2, #2
751:system/core/sdcard/sdcard.c **** hdr.len = len + sizeof(hdr);
512 .loc 1 751 0
513 0014 01F11005 add r5, r1, #16
758:system/core/sdcard/sdcard.c **** vec[1].iov_len = len;
514 .loc 1 758 0
515 0018 0791 str r1, [sp, #28]
760:system/core/sdcard/sdcard.c **** res = writev(fuse->fd, vec, 2);
516 .loc 1 760 0
517 001a 04A9 add r1, sp, #16
746:system/core/sdcard/sdcard.c **** {
518 .loc 1 746 0
519 .LPIC5:
520 001c 7C44 add r4, pc
751:system/core/sdcard/sdcard.c **** hdr.len = len + sizeof(hdr);
521 .loc 1 751 0
522 001e 0095 str r5, [sp, #0]
752:system/core/sdcard/sdcard.c **** hdr.error = 0;
523 .loc 1 752 0
524 0020 0025 movs r5, #0
755:system/core/sdcard/sdcard.c **** vec[0].iov_base = &hdr;
525 .loc 1 755 0
526 0022 0DEB0503 add r3, sp, r5
752:system/core/sdcard/sdcard.c **** hdr.error = 0;
527 .loc 1 752 0
528 0026 0195 str r5, [sp, #4]
755:system/core/sdcard/sdcard.c **** vec[0].iov_base = &hdr;
529 .loc 1 755 0
530 0028 0493 str r3, [sp, #16]
757:system/core/sdcard/sdcard.c **** vec[1].iov_base = data;
ARM GAS /tmp/cc3I8rcL.s page 46
531 .loc 1 757 0
532 002a 0C9B ldr r3, [sp, #48]
533 002c 0693 str r3, [sp, #24]
760:system/core/sdcard/sdcard.c **** res = writev(fuse->fd, vec, 2);
534 .loc 1 760 0
535 002e FFF7FEFF bl writev(PLT)
536 .LVL49:
761:system/core/sdcard/sdcard.c **** if (res < 0) {
537 .loc 1 761 0
538 0032 A842 cmp r0, r5
539 0034 09DA bge .L37
540 .LBB232:
541 .LBB233:
762:system/core/sdcard/sdcard.c **** ERROR("*** REPLY FAILED *** %d\n", errno);
542 .loc 1 762 0
543 0036 FFF7FEFF bl __errno(PLT)
544 .LVL50:
545 003a 0268 ldr r2, [r0, #0]
546 003c 0548 ldr r0, .L39+4
547 003e 0649 ldr r1, .L39+8
548 0040 2058 ldr r0, [r4, r0]
549 .LPIC6:
550 0042 7944 add r1, pc
551 0044 A830 adds r0, r0, #168
552 0046 FFF7FEFF bl fprintf(PLT)
553 .LVL51:
554 .L37:
555 .LBE233:
556 .LBE232:
764:system/core/sdcard/sdcard.c **** }
557 .loc 1 764 0
558 004a 09B0 add sp, sp, #36
559 004c 30BD pop {r4, r5, pc}
560 .L40:
561 004e 00BF .align 2
562 .L39:
563 0050 30000000 .word _GLOBAL_OFFSET_TABLE_-(.LPIC5+4)
564 0054 00000000 .word __sF(GOT)
565 0058 12000000 .word .LC4-(.LPIC6+4)
566 .cfi_endproc
567 .LFE86:
568 .fnend
570 .section .text.release_node_locked,"ax",%progbits
571 .align 1
572 .thumb
573 .thumb_func
575 release_node_locked:
576 .fnstart
577 .LFB67:
258:system/core/sdcard/sdcard.c **** {
578 .loc 1 258 0
579 .cfi_startproc
580 @ args = 0, pretend = 0, frame = 0
581 @ frame_needed = 0, uses_anonymous_args = 0
582 .LVL52:
583 0000 10B5 push {r4, lr}
584 .save {r4, lr}
ARM GAS /tmp/cc3I8rcL.s page 47
585 .LCFI9:
586 .cfi_def_cfa_offset 8
587 .cfi_offset 4, -8
588 .cfi_offset 14, -4
258:system/core/sdcard/sdcard.c **** {
589 .loc 1 258 0
590 0002 0446 mov r4, r0
591 0004 144B ldr r3, .L44
260:system/core/sdcard/sdcard.c **** if (node->refcount > 0) {
592 .loc 1 260 0
593 0006 0268 ldr r2, [r0, #0]
258:system/core/sdcard/sdcard.c **** {
594 .loc 1 258 0
595 .LPIC7:
596 0008 7B44 add r3, pc
260:system/core/sdcard/sdcard.c **** if (node->refcount > 0) {
597 .loc 1 260 0
598 000a D2B1 cbz r2, .L42
261:system/core/sdcard/sdcard.c **** node->refcount--;
599 .loc 1 261 0
600 000c 531E subs r3, r2, #1
601 000e 0360 str r3, [r0, #0]
262:system/core/sdcard/sdcard.c **** if (!node->refcount) {
602 .loc 1 262 0
603 0010 002B cmp r3, #0
604 0012 20D1 bne .L41
605 .LVL53:
606 .LBB240:
607 .LBB241:
264:system/core/sdcard/sdcard.c **** remove_node_from_parent_locked(node);
608 .loc 1 264 0
609 0014 FFF7FEFF bl remove_node_from_parent_locked(PLT)
610 .LVL54:
611 .LBB242:
612 .LBB243:
144:bionic/libc/include/string.h **** return __builtin___memset_chk(s, c, n, __builtin_object_size (s, 0));
613 .loc 2 144 0
614 0018 EF21 movs r1, #239
615 001a A26B ldr r2, [r4, #56]
616 001c E06B ldr r0, [r4, #60]
617 001e FFF7FEFF bl memset(PLT)
618 .LVL55:
619 .LBE243:
620 .LBE242:
268:system/core/sdcard/sdcard.c **** free(node->name);
621 .loc 1 268 0
622 0022 E06B ldr r0, [r4, #60]
623 0024 FFF7FEFF bl free(PLT)
624 .LVL56:
269:system/core/sdcard/sdcard.c **** free(node->actual_name);
625 .loc 1 269 0
626 0028 206C ldr r0, [r4, #64]
627 002a FFF7FEFF bl free(PLT)
628 .LVL57:
629 .LBB244:
630 .LBB245:
144:bionic/libc/include/string.h **** return __builtin___memset_chk(s, c, n, __builtin_object_size (s, 0));
ARM GAS /tmp/cc3I8rcL.s page 48
631 .loc 2 144 0
632 002e 2046 mov r0, r4
633 0030 FC21 movs r1, #252
634 0032 5022 movs r2, #80
635 0034 FFF7FEFF bl memset(PLT)
636 .LVL58:
637 .LBE245:
638 .LBE244:
271:system/core/sdcard/sdcard.c **** free(node);
639 .loc 1 271 0
640 0038 2046 mov r0, r4
641 .LBE241:
642 .LBE240:
276:system/core/sdcard/sdcard.c **** }
643 .loc 1 276 0
644 003a BDE81040 pop {r4, lr}
645 .LBB247:
646 .LBB246:
271:system/core/sdcard/sdcard.c **** free(node);
647 .loc 1 271 0
648 003e FFF7FEBF b free(PLT)
649 .LVL59:
650 .L42:
651 .LBE246:
652 .LBE247:
274:system/core/sdcard/sdcard.c **** ERROR("Zero refcnt %p\n", node);
653 .loc 1 274 0
654 0042 0648 ldr r0, .L44+4
655 .LVL60:
656 0044 2246 mov r2, r4
657 0046 0649 ldr r1, .L44+8
658 0048 1858 ldr r0, [r3, r0]
659 .LPIC8:
660 004a 7944 add r1, pc
661 004c A830 adds r0, r0, #168
276:system/core/sdcard/sdcard.c **** }
662 .loc 1 276 0
663 004e BDE81040 pop {r4, lr}
274:system/core/sdcard/sdcard.c **** ERROR("Zero refcnt %p\n", node);
664 .loc 1 274 0
665 0052 FFF7FEBF b fprintf(PLT)
666 .LVL61:
667 .L41:
668 0056 10BD pop {r4, pc}
669 .L45:
670 .align 2
671 .L44:
672 0058 4C000000 .word _GLOBAL_OFFSET_TABLE_-(.LPIC7+4)
673 005c 00000000 .word __sF(GOT)
674 0060 12000000 .word .LC5-(.LPIC8+4)
675 .cfi_endproc
676 .LFE67:
677 .fnend
679 .section .text.remove_node_from_parent_locked,"ax",%progbits
680 .align 1
681 .thumb
682 .thumb_func
ARM GAS /tmp/cc3I8rcL.s page 49
684 remove_node_from_parent_locked:
685 .fnstart
686 .LFB69:
286:system/core/sdcard/sdcard.c **** {
687 .loc 1 286 0
688 .cfi_startproc
689 @ args = 0, pretend = 0, frame = 0
690 @ frame_needed = 0, uses_anonymous_args = 0
691 .LVL62:
692 0000 10B5 push {r4, lr}
693 .save {r4, lr}
694 .LCFI10:
695 .cfi_def_cfa_offset 8
696 .cfi_offset 4, -8
697 .cfi_offset 14, -4
286:system/core/sdcard/sdcard.c **** {
698 .loc 1 286 0
699 0002 0446 mov r4, r0
287:system/core/sdcard/sdcard.c **** if (node->parent) {
700 .loc 1 287 0
701 0004 426B ldr r2, [r0, #52]
702 0006 8AB1 cbz r2, .L46
288:system/core/sdcard/sdcard.c **** if (node->parent->child == node) {
703 .loc 1 288 0
704 0008 136B ldr r3, [r2, #48]
705 000a 8342 cmp r3, r0
706 000c 03D1 bne .L54
289:system/core/sdcard/sdcard.c **** node->parent->child = node->parent->child->next;
707 .loc 1 289 0
708 000e C06A ldr r0, [r0, #44]
709 .LVL63:
710 0010 1063 str r0, [r2, #48]
711 0012 05E0 b .L49
712 .LVL64:
713 .L51:
714 .LBB248:
294:system/core/sdcard/sdcard.c **** node2 = node2->next;
715 .loc 1 294 0
716 0014 0346 mov r3, r0
717 .LVL65:
718 .L54:
293:system/core/sdcard/sdcard.c **** while (node2->next != node)
719 .loc 1 293 0 discriminator 1
720 0016 D86A ldr r0, [r3, #44]
721 0018 A042 cmp r0, r4
722 001a FBD1 bne .L51
295:system/core/sdcard/sdcard.c **** node2->next = node->next;
723 .loc 1 295 0
724 001c E16A ldr r1, [r4, #44]
725 001e D962 str r1, [r3, #44]
726 .LVL66:
727 .L49:
728 .LBE248:
297:system/core/sdcard/sdcard.c **** release_node_locked(node->parent);
729 .loc 1 297 0
730 0020 606B ldr r0, [r4, #52]
731 0022 FFF7FEFF bl release_node_locked(PLT)
ARM GAS /tmp/cc3I8rcL.s page 50
732 .LVL67:
298:system/core/sdcard/sdcard.c **** node->parent = NULL;
733 .loc 1 298 0
734 0026 0022 movs r2, #0
735 0028 6263 str r2, [r4, #52]
299:system/core/sdcard/sdcard.c **** node->next = NULL;
736 .loc 1 299 0
737 002a E262 str r2, [r4, #44]
738 .L46:
739 002c 10BD pop {r4, pc}
740 .cfi_endproc
741 .LFE69:
742 .fnend
744 .section .text.get_caller_has_rw_locked,"ax",%progbits
745 .align 1
746 .thumb
747 .thumb_func
749 get_caller_has_rw_locked:
750 .fnstart
751 .LFB75:
507:system/core/sdcard/sdcard.c **** static bool get_caller_has_rw_locked(struct fuse* fuse, const struct fuse_in_header *hdr) {
752 .loc 1 507 0
753 .cfi_startproc
754 @ args = 0, pretend = 0, frame = 0
755 @ frame_needed = 0, uses_anonymous_args = 0
756 .LVL68:
757 0000 10B5 push {r4, lr}
758 .save {r4, lr}
759 .LCFI11:
760 .cfi_def_cfa_offset 8
761 .cfi_offset 4, -8
762 .cfi_offset 14, -4
507:system/core/sdcard/sdcard.c **** static bool get_caller_has_rw_locked(struct fuse* fuse, const struct fuse_in_header *hdr) {
763 .loc 1 507 0
764 0002 0446 mov r4, r0
509:system/core/sdcard/sdcard.c **** if (fuse->derive == DERIVE_NONE) {
765 .loc 1 509 0
766 0004 4369 ldr r3, [r0, #20]
767 0006 53B1 cbz r3, .L57
768 .LVL69:
769 .LBB251:
770 .LBB252:
513:system/core/sdcard/sdcard.c **** appid_t appid = multiuser_get_app_id(hdr->uid);
771 .loc 1 513 0
772 0008 8869 ldr r0, [r1, #24]
773 .LVL70:
514:system/core/sdcard/sdcard.c **** return hashmapContainsKey(fuse->appid_with_rw, (void*) appid);
774 .loc 1 514 0
775 000a 04F58354 add r4, r4, #4192
776 .LVL71:
513:system/core/sdcard/sdcard.c **** appid_t appid = multiuser_get_app_id(hdr->uid);
777 .loc 1 513 0
778 000e FFF7FEFF bl multiuser_get_app_id(PLT)
779 .LVL72:
780 0012 0146 mov r1, r0
781 .LVL73:
514:system/core/sdcard/sdcard.c **** return hashmapContainsKey(fuse->appid_with_rw, (void*) appid);
ARM GAS /tmp/cc3I8rcL.s page 51
782 .loc 1 514 0
783 0014 6069 ldr r0, [r4, #20]
784 .LVL74:
785 .LBE252:
786 .LBE251:
515:system/core/sdcard/sdcard.c **** }
787 .loc 1 515 0
788 0016 BDE81040 pop {r4, lr}
789 .LBB254:
790 .LBB253:
514:system/core/sdcard/sdcard.c **** return hashmapContainsKey(fuse->appid_with_rw, (void*) appid);
791 .loc 1 514 0
792 001a FFF7FEBF b hashmapContainsKey(PLT)
793 .LVL75:
794 .L57:
795 .LBE253:
796 .LBE254:
515:system/core/sdcard/sdcard.c **** }
797 .loc 1 515 0
798 001e 0120 movs r0, #1
799 .LVL76:
800 0020 10BD pop {r4, pc}
801 .cfi_endproc
802 .LFE75:
803 .fnend
805 .section .text.handle_statfs.isra.19,"ax",%progbits
806 .align 1
807 .thumb
808 .thumb_func
810 handle_statfs.isra.19:
811 .fnstart
812 .LFB140:
1258:system/core/sdcard/sdcard.c **** static int handle_statfs(struct fuse* fuse, struct fuse_handler* handler,
813 .loc 1 1258 0
814 .cfi_startproc
815 @ args = 0, pretend = 0, frame = 4272
816 @ frame_needed = 0, uses_anonymous_args = 0
817 .LVL77:
818 0000 314B ldr r3, .L63
819 0002 324A ldr r2, .L63+4
820 0004 2DE9F042 push {r4, r5, r6, r7, r9, lr}
821 .save {r4, r5, r6, r7, r9, lr}
822 .LCFI12:
823 .cfi_def_cfa_offset 24
824 .cfi_offset 4, -24
825 .cfi_offset 5, -20
826 .cfi_offset 6, -16
827 .cfi_offset 7, -12
828 .cfi_offset 9, -8
829 .cfi_offset 14, -4
830 .pad #4256
831 0008 ADF5855D sub sp, sp, #4256
832 .LCFI13:
833 .cfi_def_cfa_offset 4280
834 .pad #24
835 000c 86B0 sub sp, sp, #24
836 .LCFI14:
ARM GAS /tmp/cc3I8rcL.s page 52
837 .cfi_def_cfa_offset 4304
1258:system/core/sdcard/sdcard.c **** static int handle_statfs(struct fuse* fuse, struct fuse_handler* handler,
838 .loc 1 1258 0
839 000e 8946 mov r9, r1
840 .LPIC9:
841 0010 7B44 add r3, pc
842 0012 0DF58551 add r1, sp, #4256
843 .LVL78:
844 0016 9C58 ldr r4, [r3, r2]
845 0018 1431 adds r1, r1, #20
846 001a 0746 mov r7, r0
847 001c 2368 ldr r3, [r4, #0]
848 001e 0B60 str r3, [r1, #0]
849 .LVL79:
1266:system/core/sdcard/sdcard.c **** pthread_mutex_lock(&fuse->lock);
850 .loc 1 1266 0
851 0020 FFF7FEFF bl pthread_mutex_lock(PLT)
852 .LVL80:
1268:system/core/sdcard/sdcard.c **** res = get_node_path_locked(&fuse->root, path, sizeof(path));
853 .loc 1 1268 0
854 0024 2DA9 add r1, sp, #180
855 0026 4FF48052 mov r2, #4096
856 002a 07F12000 add r0, r7, #32
857 002e FFF7FEFF bl get_node_path_locked(PLT)
858 .LVL81:
859 0032 0546 mov r5, r0
860 .LVL82:
1269:system/core/sdcard/sdcard.c **** pthread_mutex_unlock(&fuse->lock);
861 .loc 1 1269 0
862 0034 3846 mov r0, r7
863 .LVL83:
864 0036 FFF7FEFF bl pthread_mutex_unlock(PLT)
865 .LVL84:
1270:system/core/sdcard/sdcard.c **** if (res < 0) {
866 .loc 1 1270 0
867 003a 002D cmp r5, #0
868 003c 34DB blt .L62
1273:system/core/sdcard/sdcard.c **** if (statfs(fuse->root.name, &stat) < 0) {
869 .loc 1 1273 0
870 003e F86D ldr r0, [r7, #92]
871 0040 16A9 add r1, sp, #88
872 0042 FFF7FEFF bl statfs(PLT)
873 .LVL85:
874 0046 0028 cmp r0, #0
875 0048 04DA bge .L60
1274:system/core/sdcard/sdcard.c **** return -errno;
876 .loc 1 1274 0
877 004a FFF7FEFF bl __errno(PLT)
878 .LVL86:
879 004e 0068 ldr r0, [r0, #0]
880 0050 4042 negs r0, r0
881 0052 2BE0 b .L59
882 .L60:
883 .LVL87:
884 .LBB255:
885 .LBB256:
1276:system/core/sdcard/sdcard.c **** memset(&out, 0, sizeof(out));
ARM GAS /tmp/cc3I8rcL.s page 53
886 .loc 1 1276 0
887 0054 02AE add r6, sp, #8
888 .LVL88:
144:bionic/libc/include/string.h **** return __builtin___memset_chk(s, c, n, __builtin_object_size (s, 0));
889 .loc 2 144 0
890 0056 5025 movs r5, #80
891 .LVL89:
892 0058 0021 movs r1, #0
893 005a 2A46 mov r2, r5
894 005c 3046 mov r0, r6
895 005e FFF7FEFF bl memset(PLT)
896 .LVL90:
897 .LBE256:
898 .LBE255:
1277:system/core/sdcard/sdcard.c **** out.st.blocks = stat.f_blocks;
899 .loc 1 1277 0
900 0062 DDE91801 ldrd r0, [sp, #96]
1278:system/core/sdcard/sdcard.c **** out.st.bfree = stat.f_bfree;
901 .loc 1 1278 0
902 0066 DDE91A23 ldrd r2, [sp, #104]
1277:system/core/sdcard/sdcard.c **** out.st.blocks = stat.f_blocks;
903 .loc 1 1277 0
904 006a CDE90201 strd r0, [sp, #8]
1279:system/core/sdcard/sdcard.c **** out.st.bavail = stat.f_bavail;
905 .loc 1 1279 0
906 006e DDE91C01 ldrd r0, [sp, #112]
1278:system/core/sdcard/sdcard.c **** out.st.bfree = stat.f_bfree;
907 .loc 1 1278 0
908 0072 CDE90423 strd r2, [sp, #16]
1280:system/core/sdcard/sdcard.c **** out.st.files = stat.f_files;
909 .loc 1 1280 0
910 0076 DDE91E23 ldrd r2, [sp, #120]
1279:system/core/sdcard/sdcard.c **** out.st.bavail = stat.f_bavail;
911 .loc 1 1279 0
912 007a C6E90401 strd r0, [r6, #16]
1281:system/core/sdcard/sdcard.c **** out.st.ffree = stat.f_ffree;
913 .loc 1 1281 0
914 007e DDE92001 ldrd r0, [sp, #128]
1280:system/core/sdcard/sdcard.c **** out.st.files = stat.f_files;
915 .loc 1 1280 0
916 0082 C6E90623 strd r2, [r6, #24]
1282:system/core/sdcard/sdcard.c **** out.st.bsize = stat.f_bsize;
917 .loc 1 1282 0
918 0086 179B ldr r3, [sp, #92]
1284:system/core/sdcard/sdcard.c **** out.st.frsize = stat.f_frsize;
919 .loc 1 1284 0
920 0088 259A ldr r2, [sp, #148]
1281:system/core/sdcard/sdcard.c **** out.st.ffree = stat.f_ffree;
921 .loc 1 1281 0
922 008a C6E90801 strd r0, [r6, #32]
1283:system/core/sdcard/sdcard.c **** out.st.namelen = stat.f_namelen;
923 .loc 1 1283 0
924 008e 2499 ldr r1, [sp, #144]
1285:system/core/sdcard/sdcard.c **** fuse_reply(fuse, hdr->unique, &out, sizeof(out));
925 .loc 1 1285 0
926 0090 3846 mov r0, r7
1282:system/core/sdcard/sdcard.c **** out.st.bsize = stat.f_bsize;
ARM GAS /tmp/cc3I8rcL.s page 54
927 .loc 1 1282 0
928 0092 B362 str r3, [r6, #40]
1284:system/core/sdcard/sdcard.c **** out.st.frsize = stat.f_frsize;
929 .loc 1 1284 0
930 0094 3263 str r2, [r6, #48]
1285:system/core/sdcard/sdcard.c **** fuse_reply(fuse, hdr->unique, &out, sizeof(out));
931 .loc 1 1285 0
932 0096 D9E90223 ldrd r2, [r9, #8]
1283:system/core/sdcard/sdcard.c **** out.st.namelen = stat.f_namelen;
933 .loc 1 1283 0
934 009a F162 str r1, [r6, #44]
1285:system/core/sdcard/sdcard.c **** fuse_reply(fuse, hdr->unique, &out, sizeof(out));
935 .loc 1 1285 0
936 009c 0096 str r6, [sp, #0]
937 009e 0195 str r5, [sp, #4]
938 00a0 FFF7FEFF bl fuse_reply(PLT)
939 .LVL91:
1286:system/core/sdcard/sdcard.c **** return NO_STATUS;
940 .loc 1 1286 0
941 00a4 0120 movs r0, #1
942 00a6 01E0 b .L59
943 .LVL92:
944 .L62:
1271:system/core/sdcard/sdcard.c **** return -ENOENT;
945 .loc 1 1271 0
946 00a8 6FF00100 mvn r0, #1
947 .LVL93:
948 .L59:
1287:system/core/sdcard/sdcard.c **** }
949 .loc 1 1287 0
950 00ac 0DF58553 add r3, sp, #4256
951 00b0 1433 adds r3, r3, #20
952 00b2 1968 ldr r1, [r3, #0]
953 00b4 2268 ldr r2, [r4, #0]
954 00b6 9142 cmp r1, r2
955 00b8 01D0 beq .L61
956 00ba FFF7FEFF bl __stack_chk_fail(PLT)
957 .LVL94:
958 .L61:
959 00be 2EB0 add sp, sp, #184
960 00c0 0DF5805D add sp, sp, #4096
961 00c4 BDE8F082 pop {r4, r5, r6, r7, r9, pc}
962 .L64:
963 .align 2
964 .L63:
965 00c8 B4000000 .word _GLOBAL_OFFSET_TABLE_-(.LPIC9+4)
966 00cc 00000000 .word __stack_chk_guard(GOT)
967 .cfi_endproc
968 .LFE140:
969 .fnend
971 .section .text.handle_readdir.isra.21,"ax",%progbits
972 .align 1
973 .thumb
974 .thumb_func
976 handle_readdir.isra.21:
977 .fnstart
978 .LFB142:
ARM GAS /tmp/cc3I8rcL.s page 55
1360:system/core/sdcard/sdcard.c **** static int handle_readdir(struct fuse* fuse, struct fuse_handler* handler,
979 .loc 1 1360 0
980 .cfi_startproc
981 @ args = 0, pretend = 0, frame = 8208
982 @ frame_needed = 0, uses_anonymous_args = 0
983 .LVL95:
984 0000 3B4B ldr r3, .L78+8
985 0002 2DE9F04F push {r4, r5, r6, r7, r8, r9, sl, fp, lr}
986 .save {r4, r5, r6, r7, r8, r9, sl, fp, lr}
987 .LCFI15:
988 .cfi_def_cfa_offset 36
989 .cfi_offset 4, -36
990 .cfi_offset 5, -32
991 .cfi_offset 6, -28
992 .cfi_offset 7, -24
993 .cfi_offset 8, -20
994 .cfi_offset 9, -16
995 .cfi_offset 10, -12
996 .cfi_offset 11, -8
997 .cfi_offset 14, -4
998 0006 9046 mov r8, r2
999 0008 3A4A ldr r2, .L78+12
1000 .LVL96:
1001 000a 0F46 mov r7, r1
1002 .pad #8192
1003 000c ADF5005D sub sp, sp, #8192
1004 .LCFI16:
1005 .cfi_def_cfa_offset 8228
1006 .pad #28
1007 0010 87B0 sub sp, sp, #28
1008 .LCFI17:
1009 .cfi_def_cfa_offset 8256
1360:system/core/sdcard/sdcard.c **** static int handle_readdir(struct fuse* fuse, struct fuse_handler* handler,
1010 .loc 1 1360 0
1011 0012 0546 mov r5, r0
1012 .LBB257:
1013 .LBB258:
241:system/core/sdcard/sdcard.c **** return (void *) (uintptr_t) nid;
1014 .loc 1 241 0
1015 0014 D8F800A0 ldr sl, [r8, #0]
1016 .LBE258:
1017 .LBE257:
1360:system/core/sdcard/sdcard.c **** static int handle_readdir(struct fuse* fuse, struct fuse_handler* handler,
1018 .loc 1 1360 0
1019 .LPIC10:
1020 0018 7B44 add r3, pc
1021 001a 0DF50050 add r0, sp, #8192
1022 .LVL97:
1023 001e 1430 adds r0, r0, #20
1024 0020 9958 ldr r1, [r3, r2]
1025 .LVL98:
1026 0022 0B68 ldr r3, [r1, #0]
1027 0024 8B46 mov fp, r1
1028 0026 0360 str r3, [r0, #0]
1029 .LVL99:
1370:system/core/sdcard/sdcard.c **** if (req->offset == 0) {
1030 .loc 1 1370 0
ARM GAS /tmp/cc3I8rcL.s page 56
1031 0028 D8E90223 ldrd r2, [r8, #8]
1032 002c 52EA0300 orrs r0, r2, r3
1033 0030 03D1 bne .L70
1373:system/core/sdcard/sdcard.c **** rewinddir(h->d);
1034 .loc 1 1373 0
1035 0032 DAF80000 ldr r0, [sl, #0]
1036 0036 FFF7FEFF bl rewinddir(PLT)
1037 .LVL100:
1038 .L70:
1380:system/core/sdcard/sdcard.c **** fde->ino = FUSE_UNKNOWN_INO;
1039 .loc 1 1380 0
1040 003a 05AC add r4, sp, #20
1041 .LVL101:
1042 .L75:
1376:system/core/sdcard/sdcard.c **** de = readdir(h->d);
1043 .loc 1 1376 0
1044 003c DAF80000 ldr r0, [sl, #0]
1045 0040 FFF7FEFF bl readdir(PLT)
1046 .LVL102:
1377:system/core/sdcard/sdcard.c **** if (!de) {
1047 .loc 1 1377 0
1048 0044 0028 cmp r0, #0
1049 0046 3ED0 beq .L67
1382:system/core/sdcard/sdcard.c **** fde->off = req->offset + 1;
1050 .loc 1 1382 0
1051 0048 DFED270B fldd d16, .L78 @ int
1380:system/core/sdcard/sdcard.c **** fde->ino = FUSE_UNKNOWN_INO;
1052 .loc 1 1380 0
1053 004c 0021 movs r1, #0
1054 004e 4FF0FF36 mov r6, #-1
1382:system/core/sdcard/sdcard.c **** fde->off = req->offset + 1;
1055 .loc 1 1382 0
1056 0052 D8ED021B fldd d17, [r8, #8] @ int
1384:system/core/sdcard/sdcard.c **** fde->namelen = strlen(de->d_name);
1057 .loc 1 1384 0
1058 0056 00F11309 add r9, r0, #19
1059 .LVL103:
1380:system/core/sdcard/sdcard.c **** fde->ino = FUSE_UNKNOWN_INO;
1060 .loc 1 1380 0
1061 005a 2660 str r6, [r4, #0]
1062 005c 6160 str r1, [r4, #4]
1382:system/core/sdcard/sdcard.c **** fde->off = req->offset + 1;
1063 .loc 1 1382 0
1064 005e 31EFA008 vadd.i64 d0, d17, d16
1065 0062 53EC102B fmrrd r2, r3, d0 @ int
1066 0066 84ED020A fsts s0, [r4, #8] @ int
1067 006a E360 str r3, [r4, #12]
1383:system/core/sdcard/sdcard.c **** fde->type = de->d_type;
1068 .loc 1 1383 0
1069 006c 837C ldrb r3, [r0, #18] @ zero_extendqisi2
1070 .LBB259:
1071 .LBB260:
1072 .loc 2 217 0
1073 006e 4846 mov r0, r9
1074 .LVL104:
1075 .LBE260:
1076 .LBE259:
ARM GAS /tmp/cc3I8rcL.s page 57
1383:system/core/sdcard/sdcard.c **** fde->type = de->d_type;
1077 .loc 1 1383 0
1078 0070 6361 str r3, [r4, #20]
1079 .LBB263:
1080 .LBB261:
1081 .loc 2 217 0
1082 0072 0391 str r1, [sp, #12]
1083 0074 FFF7FEFF bl strlen(PLT)
1084 .LVL105:
1085 .LBE261:
1086 .LBE263:
1386:system/core/sdcard/sdcard.c **** parent_node = lookup_node_by_id_locked(fuse, hdr->nodeid);
1087 .loc 1 1386 0
1088 0078 D7E90423 ldrd r2, [r7, #16]
1089 .LVL106:
1384:system/core/sdcard/sdcard.c **** fde->namelen = strlen(de->d_name);
1090 .loc 1 1384 0
1091 007c 2061 str r0, [r4, #16]
1092 .LBB264:
1093 .LBB262:
1094 .loc 2 217 0
1095 007e 0646 mov r6, r0
1096 0080 0398 ldr r0, [sp, #12]
1097 .LBE262:
1098 .LBE264:
1099 .LBB265:
1100 .LBB266:
640:system/core/sdcard/sdcard.c **** if (nid == FUSE_ROOT_ID) {
1101 .loc 1 640 0
1102 0082 002B cmp r3, #0
1103 0084 08BF it eq
1104 0086 012A cmpeq r2, #1
1105 .LBE266:
1106 .LBE265:
1388:system/core/sdcard/sdcard.c **** if (!check_caller_access_to_name(fuse, hdr, parent_node, de->d_name, R_OK, false)) {
1107 .loc 1 1388 0
1108 0088 4B46 mov r3, r9
1109 .LBB268:
1110 .LBB267:
641:system/core/sdcard/sdcard.c **** return &fuse->root;
1111 .loc 1 641 0
1112 008a 08BF it eq
1113 008c 05F12002 addeq r2, r5, #32
1114 .LVL107:
1115 .LBE267:
1116 .LBE268:
1388:system/core/sdcard/sdcard.c **** if (!check_caller_access_to_name(fuse, hdr, parent_node, de->d_name, R_OK, false)) {
1117 .loc 1 1388 0
1118 0090 0421 movs r1, #4
1119 0092 0190 str r0, [sp, #4]
1120 0094 2846 mov r0, r5
1121 0096 0091 str r1, [sp, #0]
1122 0098 3946 mov r1, r7
1123 009a FFF7FEFF bl check_caller_access_to_name(PLT)
1124 .LVL108:
1125 009e 0028 cmp r0, #0
1126 00a0 CCD0 beq .L75
ARM GAS /tmp/cc3I8rcL.s page 58
1127 .LVL109:
1128 .LBB269:
1129 .LBB270:
108:bionic/libc/include/string.h **** return __builtin___memcpy_chk(dest, src, copy_amount, d_len);
1130 .loc 2 108 0
1131 00a2 721C adds r2, r6, #1
1132 .LVL110:
1133 .LBE270:
1134 .LBE269:
1394:system/core/sdcard/sdcard.c **** FUSE_DIRENT_ALIGN(sizeof(struct fuse_dirent) + fde->namelen));
1135 .loc 1 1394 0
1136 00a4 1F36 adds r6, r6, #31
1393:system/core/sdcard/sdcard.c **** fuse_reply(fuse, hdr->unique, fde,
1137 .loc 1 1393 0
1138 00a6 26F00706 bic r6, r6, #7
1139 .LBB272:
1140 .LBB271:
108:bionic/libc/include/string.h **** return __builtin___memcpy_chk(dest, src, copy_amount, d_len);
1141 .loc 2 108 0
1142 00aa 4946 mov r1, r9
1143 00ac 41F6E873 movw r3, #8168
1144 00b0 0BA8 add r0, sp, #44
1145 .LVL111:
1146 00b2 FFF7FEFF bl __memcpy_chk(PLT)
1147 .LVL112:
1148 .LBE271:
1149 .LBE272:
1393:system/core/sdcard/sdcard.c **** fuse_reply(fuse, hdr->unique, fde,
1150 .loc 1 1393 0
1151 00b6 D7E90223 ldrd r2, [r7, #8]
1152 00ba 2846 mov r0, r5
1153 00bc 0094 str r4, [sp, #0]
1154 00be 0196 str r6, [sp, #4]
1155 00c0 FFF7FEFF bl fuse_reply(PLT)
1156 .LVL113:
1395:system/core/sdcard/sdcard.c **** return NO_STATUS;
1157 .loc 1 1395 0
1158 00c4 0120 movs r0, #1
1159 .LVL114:
1160 .L67:
1396:system/core/sdcard/sdcard.c **** }
1161 .loc 1 1396 0
1162 00c6 0DF50052 add r2, sp, #8192
1163 00ca 1432 adds r2, r2, #20
1164 00cc 1168 ldr r1, [r2, #0]
1165 00ce DBF80030 ldr r3, [fp, #0]
1166 00d2 9942 cmp r1, r3
1167 00d4 01D0 beq .L71
1168 00d6 FFF7FEFF bl __stack_chk_fail(PLT)
1169 .LVL115:
1170 .L71:
1171 00da 07B0 add sp, sp, #28
1172 00dc 0DF5005D add sp, sp, #8192
1173 00e0 BDE8F08F pop {r4, r5, r6, r7, r8, r9, sl, fp, pc}
1174 .L79:
1175 00e4 AFF30080 .align 3
1176 .L78:
ARM GAS /tmp/cc3I8rcL.s page 59
1177 00e8 01000000 .word 1
1178 00ec 00000000 .word 0
1179 00f0 D4000000 .word _GLOBAL_OFFSET_TABLE_-(.LPIC10+4)
1180 00f4 00000000 .word __stack_chk_guard(GOT)
1181 .cfi_endproc
1182 .LFE142:
1183 .fnend
1185 .section .text.touch.constprop.26,"ax",%progbits
1186 .align 1
1187 .thumb
1188 .thumb_func
1190 touch.constprop.26:
1191 .fnstart
1192 .LFB149:
407:system/core/sdcard/sdcard.c **** static int touch(char* path, mode_t mode) {
1193 .loc 1 407 0
1194 .cfi_startproc
1195 @ args = 0, pretend = 0, frame = 0
1196 @ frame_needed = 0, uses_anonymous_args = 0
1197 .LVL116:
1198 0000 70B5 push {r4, r5, r6, lr}
1199 .save {r4, r5, r6, lr}
1200 .LCFI18:
1201 .cfi_def_cfa_offset 16
1202 .cfi_offset 4, -16
1203 .cfi_offset 5, -12
1204 .cfi_offset 6, -8
1205 .cfi_offset 14, -4
1206 .LBB279:
1207 .LBB280:
1208 .file 3 "bionic/libc/include/fcntl.h"
1:bionic/libc/include/fcntl.h **** /*
2:bionic/libc/include/fcntl.h **** * Copyright (C) 2008 The Android Open Source Project
3:bionic/libc/include/fcntl.h **** * All rights reserved.
4:bionic/libc/include/fcntl.h **** *
5:bionic/libc/include/fcntl.h **** * Redistribution and use in source and binary forms, with or without
6:bionic/libc/include/fcntl.h **** * modification, are permitted provided that the following conditions
7:bionic/libc/include/fcntl.h **** * are met:
8:bionic/libc/include/fcntl.h **** * * Redistributions of source code must retain the above copyright
9:bionic/libc/include/fcntl.h **** * notice, this list of conditions and the following disclaimer.
10:bionic/libc/include/fcntl.h **** * * Redistributions in binary form must reproduce the above copyright
11:bionic/libc/include/fcntl.h **** * notice, this list of conditions and the following disclaimer in
12:bionic/libc/include/fcntl.h **** * the documentation and/or other materials provided with the
13:bionic/libc/include/fcntl.h **** * distribution.
14:bionic/libc/include/fcntl.h **** *
15:bionic/libc/include/fcntl.h **** * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
16:bionic/libc/include/fcntl.h **** * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
17:bionic/libc/include/fcntl.h **** * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
18:bionic/libc/include/fcntl.h **** * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
19:bionic/libc/include/fcntl.h **** * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
20:bionic/libc/include/fcntl.h **** * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
21:bionic/libc/include/fcntl.h **** * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
22:bionic/libc/include/fcntl.h **** * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
23:bionic/libc/include/fcntl.h **** * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
24:bionic/libc/include/fcntl.h **** * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
25:bionic/libc/include/fcntl.h **** * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
26:bionic/libc/include/fcntl.h **** * SUCH DAMAGE.
ARM GAS /tmp/cc3I8rcL.s page 60
27:bionic/libc/include/fcntl.h **** */
28:bionic/libc/include/fcntl.h **** #ifndef _FCNTL_H
29:bionic/libc/include/fcntl.h **** #define _FCNTL_H
30:bionic/libc/include/fcntl.h ****
31:bionic/libc/include/fcntl.h **** #include <sys/cdefs.h>
32:bionic/libc/include/fcntl.h **** #include <sys/types.h>
33:bionic/libc/include/fcntl.h **** #include <linux/fcntl.h>
34:bionic/libc/include/fcntl.h **** #include <unistd.h> /* this is not required, but makes client code much happier */
35:bionic/libc/include/fcntl.h ****
36:bionic/libc/include/fcntl.h **** __BEGIN_DECLS
37:bionic/libc/include/fcntl.h ****
38:bionic/libc/include/fcntl.h **** #ifndef O_ASYNC
39:bionic/libc/include/fcntl.h **** #define O_ASYNC FASYNC
40:bionic/libc/include/fcntl.h **** #endif
41:bionic/libc/include/fcntl.h ****
42:bionic/libc/include/fcntl.h **** #ifndef O_CLOEXEC
43:bionic/libc/include/fcntl.h **** #define O_CLOEXEC 02000000
44:bionic/libc/include/fcntl.h **** #endif
45:bionic/libc/include/fcntl.h ****
46:bionic/libc/include/fcntl.h **** extern int open(const char* path, int mode, ...);
47:bionic/libc/include/fcntl.h **** extern int openat(int fd, const char* path, int mode, ...);
48:bionic/libc/include/fcntl.h **** extern int unlinkat(int dirfd, const char *pathname, int flags);
49:bionic/libc/include/fcntl.h **** extern int fcntl(int fd, int command, ...);
50:bionic/libc/include/fcntl.h **** extern int creat(const char* path, mode_t mode);
51:bionic/libc/include/fcntl.h ****
52:bionic/libc/include/fcntl.h **** #if defined(__BIONIC_FORTIFY) && !defined(__clang__)
53:bionic/libc/include/fcntl.h **** __errordecl(__creat_missing_mode, "called with O_CREAT, but missing mode");
54:bionic/libc/include/fcntl.h **** __errordecl(__creat_too_many_args, "too many arguments");
55:bionic/libc/include/fcntl.h **** extern int __open_real(const char *pathname, int flags, ...)
56:bionic/libc/include/fcntl.h **** __asm__(__USER_LABEL_PREFIX__ "open");
57:bionic/libc/include/fcntl.h **** extern int __open_2(const char *, int);
58:bionic/libc/include/fcntl.h ****
59:bionic/libc/include/fcntl.h **** __BIONIC_FORTIFY_INLINE
60:bionic/libc/include/fcntl.h **** int open(const char *pathname, int flags, ...) {
61:bionic/libc/include/fcntl.h **** if (__builtin_constant_p(flags)) {
62:bionic/libc/include/fcntl.h **** if ((flags & O_CREAT) && __builtin_va_arg_pack_len() == 0) {
63:bionic/libc/include/fcntl.h **** __creat_missing_mode(); // compile time error
64:bionic/libc/include/fcntl.h **** }
65:bionic/libc/include/fcntl.h **** }
66:bionic/libc/include/fcntl.h ****
67:bionic/libc/include/fcntl.h **** if (__builtin_va_arg_pack_len() > 1) {
68:bionic/libc/include/fcntl.h **** __creat_too_many_args(); // compile time error
69:bionic/libc/include/fcntl.h **** }
70:bionic/libc/include/fcntl.h ****
71:bionic/libc/include/fcntl.h **** if ((__builtin_va_arg_pack_len() == 0) && !__builtin_constant_p(flags)) {
72:bionic/libc/include/fcntl.h **** return __open_2(pathname, flags);
73:bionic/libc/include/fcntl.h **** }
74:bionic/libc/include/fcntl.h ****
75:bionic/libc/include/fcntl.h **** return __open_real(pathname, flags, __builtin_va_arg_pack());
1209 .loc 3 75 0
1210 0002 48F2C201 movw r1, #32962
1211 .LBE280:
1212 .LBE279:
407:system/core/sdcard/sdcard.c **** static int touch(char* path, mode_t mode) {
1213 .loc 1 407 0
1214 0006 104D ldr r5, .L86
1215 .LBB284:
ARM GAS /tmp/cc3I8rcL.s page 61
1216 .LBB281:
1217 .loc 3 75 0
1218 0008 4FF4DA72 mov r2, #436
1219 .LBE281:
1220 .LBE284:
407:system/core/sdcard/sdcard.c **** static int touch(char* path, mode_t mode) {
1221 .loc 1 407 0
1222 000c 0646 mov r6, r0
1223 .LBB285:
1224 .LBB282:
1225 .loc 3 75 0
1226 000e FFF7FEFF bl open(PLT)
1227 .LVL117:
1228 .LBE282:
1229 .LBE285:
409:system/core/sdcard/sdcard.c **** if (fd == -1) {
1230 .loc 1 409 0
1231 0012 411C adds r1, r0, #1
1232 .LBB286:
1233 .LBB283:
1234 .loc 3 75 0
1235 0014 0446 mov r4, r0
1236 .LBE283:
1237 .LBE286:
407:system/core/sdcard/sdcard.c **** static int touch(char* path, mode_t mode) {
1238 .loc 1 407 0
1239 .LPIC11:
1240 0016 7D44 add r5, pc
1241 .LVL118:
409:system/core/sdcard/sdcard.c **** if (fd == -1) {
1242 .loc 1 409 0
1243 0018 12D1 bne .L81
1244 .LVL119:
1245 .LBB287:
1246 .LBB288:
410:system/core/sdcard/sdcard.c **** if (errno == EEXIST) {
1247 .loc 1 410 0
1248 001a FFF7FEFF bl __errno(PLT)
1249 .LVL120:
1250 001e 0368 ldr r3, [r0, #0]
1251 0020 112B cmp r3, #17
1252 0022 0FD0 beq .L85
413:system/core/sdcard/sdcard.c **** ERROR("Failed to open(%s): %s\n", path, strerror(errno));
1253 .loc 1 413 0
1254 0024 0068 ldr r0, [r0, #0]
1255 0026 FFF7FEFF bl strerror(PLT)
1256 .LVL121:
1257 002a 084A ldr r2, .L86+4
1258 002c 0346 mov r3, r0
1259 002e 0849 ldr r1, .L86+8
1260 0030 A858 ldr r0, [r5, r2]
1261 0032 3246 mov r2, r6
1262 .LPIC12:
1263 0034 7944 add r1, pc
1264 0036 A830 adds r0, r0, #168
1265 0038 FFF7FEFF bl fprintf(PLT)
1266 .LVL122:
ARM GAS /tmp/cc3I8rcL.s page 62
414:system/core/sdcard/sdcard.c **** return -1;
1267 .loc 1 414 0
1268 003c 2046 mov r0, r4
1269 003e 70BD pop {r4, r5, r6, pc}
1270 .LVL123:
1271 .L81:
1272 .LBE288:
1273 .LBE287:
417:system/core/sdcard/sdcard.c **** close(fd);
1274 .loc 1 417 0
1275 0040 FFF7FEFF bl close(PLT)
1276 .LVL124:
1277 .L85:
418:system/core/sdcard/sdcard.c **** return 0;
1278 .loc 1 418 0
1279 0044 0020 movs r0, #0
419:system/core/sdcard/sdcard.c **** }
1280 .loc 1 419 0
1281 0046 70BD pop {r4, r5, r6, pc}
1282 .L87:
1283 .align 2
1284 .L86:
1285 0048 2E000000 .word _GLOBAL_OFFSET_TABLE_-(.LPIC11+4)
1286 004c 00000000 .word __sF(GOT)
1287 0050 18000000 .word .LC6-(.LPIC12+4)
1288 .cfi_endproc
1289 .LFE149:
1290 .fnend
1292 .section .text.find_file_within.constprop.27,"ax",%progbits
1293 .align 1
1294 .thumb
1295 .thumb_func
1297 find_file_within.constprop.27:
1298 .fnstart
1299 .LFB148:
347:system/core/sdcard/sdcard.c **** static char* find_file_within(const char* path, const char* name,
1300 .loc 1 347 0
1301 .cfi_startproc
1302 @ args = 0, pretend = 0, frame = 0
1303 @ frame_needed = 0, uses_anonymous_args = 0
1304 .LVL125:
1305 0000 2DE9F84F push {r3, r4, r5, r6, r7, r8, r9, sl, fp, lr}
1306 .save {r3, r4, r5, r6, r7, r8, r9, sl, fp, lr}
1307 .LCFI19:
1308 .cfi_def_cfa_offset 40
1309 .cfi_offset 3, -40
1310 .cfi_offset 4, -36
1311 .cfi_offset 5, -32
1312 .cfi_offset 6, -28
1313 .cfi_offset 7, -24
1314 .cfi_offset 8, -20
1315 .cfi_offset 9, -16
1316 .cfi_offset 10, -12
1317 .cfi_offset 11, -8
1318 .cfi_offset 14, -4
347:system/core/sdcard/sdcard.c **** static char* find_file_within(const char* path, const char* name,
1319 .loc 1 347 0
ARM GAS /tmp/cc3I8rcL.s page 63
1320 0004 0E46 mov r6, r1
1321 0006 9B46 mov fp, r3
1322 0008 1546 mov r5, r2
1323 000a DFF8ACA0 ldr sl, .L102
1324 000e 8046 mov r8, r0
1325 .LBB289:
1326 .LBB290:
1327 .loc 2 217 0
1328 0010 FFF7FEFF bl strlen(PLT)
1329 .LVL126:
1330 0014 8146 mov r9, r0
1331 .LBE290:
1332 .LBE289:
1333 .LBB291:
1334 .LBB292:
1335 0016 3046 mov r0, r6
1336 0018 FFF7FEFF bl strlen(PLT)
1337 .LVL127:
1338 .LBE292:
1339 .LBE291:
352:system/core/sdcard/sdcard.c **** size_t childlen = pathlen + namelen + 1;
1340 .loc 1 352 0
1341 001c 09F10104 add r4, r9, #1
347:system/core/sdcard/sdcard.c **** static char* find_file_within(const char* path, const char* name,
1342 .loc 1 347 0
1343 .LPIC13:
1344 0020 FA44 add sl, pc
1345 .LVL128:
352:system/core/sdcard/sdcard.c **** size_t childlen = pathlen + namelen + 1;
1346 .loc 1 352 0
1347 0022 2318 adds r3, r4, r0
1348 .LBB294:
1349 .LBB293:
1350 .loc 2 217 0
1351 0024 0746 mov r7, r0
1352 .LVL129:
1353 .LBE293:
1354 .LBE294:
355:system/core/sdcard/sdcard.c **** if (bufsize <= childlen) {
1355 .loc 1 355 0
1356 0026 B3F5805F cmp r3, #4096
1357 002a 40D2 bcs .L93
1358 .LVL130:
1359 .LBB295:
1360 .LBB296:
108:bionic/libc/include/string.h **** return __builtin___memcpy_chk(dest, src, copy_amount, d_len);
1361 .loc 2 108 0
1362 002c 4146 mov r1, r8
1363 002e 4A46 mov r2, r9
1364 0030 2846 mov r0, r5
1365 .LBE296:
1366 .LBE295:
361:system/core/sdcard/sdcard.c **** actual = buf + pathlen + 1;
1367 .loc 1 361 0
1368 0032 2C19 adds r4, r5, r4
1369 .LBB298:
1370 .LBB297:
ARM GAS /tmp/cc3I8rcL.s page 64
108:bionic/libc/include/string.h **** return __builtin___memcpy_chk(dest, src, copy_amount, d_len);
1371 .loc 2 108 0
1372 0034 FFF7FEFF bl memcpy(PLT)
1373 .LVL131:
1374 .LBE297:
1375 .LBE298:
360:system/core/sdcard/sdcard.c **** buf[pathlen] = '/';
1376 .loc 1 360 0
1377 0038 2F20 movs r0, #47
1378 .LBB299:
1379 .LBB300:
108:bionic/libc/include/string.h **** return __builtin___memcpy_chk(dest, src, copy_amount, d_len);
1380 .loc 2 108 0
1381 003a 3146 mov r1, r6
1382 003c 7A1C adds r2, r7, #1
1383 .LVL132:
1384 .LBE300:
1385 .LBE299:
360:system/core/sdcard/sdcard.c **** buf[pathlen] = '/';
1386 .loc 1 360 0
1387 003e 05F80900 strb r0, [r5, r9]
1388 .LBB302:
1389 .LBB301:
108:bionic/libc/include/string.h **** return __builtin___memcpy_chk(dest, src, copy_amount, d_len);
1390 .loc 2 108 0
1391 0042 2046 mov r0, r4
1392 0044 FFF7FEFF bl memcpy(PLT)
1393 .LVL133:
1394 .LBE301:
1395 .LBE302:
364:system/core/sdcard/sdcard.c **** if (search && access(buf, F_OK)) {
1396 .loc 1 364 0
1397 0048 BBF1000F cmp fp, #0
1398 004c 30D0 beq .L89
1399 004e 2846 mov r0, r5
1400 0050 0021 movs r1, #0
1401 0052 FFF7FEFF bl access(PLT)
1402 .LVL134:
1403 0056 58B3 cbz r0, .L89
1404 .LBB303:
366:system/core/sdcard/sdcard.c **** DIR* dir = opendir(path);
1405 .loc 1 366 0
1406 0058 4046 mov r0, r8
1407 005a FFF7FEFF bl opendir(PLT)
1408 .LVL135:
367:system/core/sdcard/sdcard.c **** if (!dir) {
1409 .loc 1 367 0
1410 005e 0546 mov r5, r0
1411 .LVL136:
1412 0060 E0B9 cbnz r0, .L98
368:system/core/sdcard/sdcard.c **** ERROR("opendir %s failed: %s\n", path, strerror(errno));
1413 .loc 1 368 0
1414 0062 FFF7FEFF bl __errno(PLT)
1415 .LVL137:
1416 0066 0068 ldr r0, [r0, #0]
1417 0068 FFF7FEFF bl strerror(PLT)
1418 .LVL138:
ARM GAS /tmp/cc3I8rcL.s page 65
1419 006c 134A ldr r2, .L102+4
1420 006e 0346 mov r3, r0
1421 0070 1349 ldr r1, .L102+8
1422 0072 5AF80200 ldr r0, [sl, r2]
1423 0076 4246 mov r2, r8
1424 .LPIC14:
1425 0078 7944 add r1, pc
1426 007a A830 adds r0, r0, #168
1427 007c FFF7FEFF bl fprintf(PLT)
1428 .LVL139:
1429 0080 16E0 b .L89
1430 .LVL140:
1431 .L92:
372:system/core/sdcard/sdcard.c **** if (!strcasecmp(entry->d_name, name)) {
1432 .loc 1 372 0
1433 0082 00F11308 add r8, r0, #19
1434 0086 3146 mov r1, r6
1435 0088 4046 mov r0, r8
1436 .LVL141:
1437 008a FFF7FEFF bl strcasecmp(PLT)
1438 .LVL142:
1439 008e 28B9 cbnz r0, .L98
1440 .LVL143:
1441 .LBB304:
1442 .LBB305:
108:bionic/libc/include/string.h **** return __builtin___memcpy_chk(dest, src, copy_amount, d_len);
1443 .loc 2 108 0
1444 0090 2046 mov r0, r4
1445 0092 4146 mov r1, r8
1446 0094 3A46 mov r2, r7
1447 0096 FFF7FEFF bl memcpy(PLT)
1448 .LVL144:
1449 009a 04E0 b .L91
1450 .LVL145:
1451 .L98:
1452 .LBE305:
1453 .LBE304:
371:system/core/sdcard/sdcard.c **** while ((entry = readdir(dir))) {
1454 .loc 1 371 0
1455 009c 2846 mov r0, r5
1456 009e FFF7FEFF bl readdir(PLT)
1457 .LVL146:
1458 00a2 0028 cmp r0, #0
1459 00a4 EDD1 bne .L92
1460 .LVL147:
1461 .L91:
378:system/core/sdcard/sdcard.c **** closedir(dir);
1462 .loc 1 378 0
1463 00a6 2846 mov r0, r5
1464 00a8 FFF7FEFF bl closedir(PLT)
1465 .LVL148:
1466 00ac 00E0 b .L89
1467 .LVL149:
1468 .L93:
1469 .LBE303:
356:system/core/sdcard/sdcard.c **** return NULL;
1470 .loc 1 356 0
ARM GAS /tmp/cc3I8rcL.s page 66
1471 00ae 0024 movs r4, #0
1472 .LVL150:
1473 .L89:
381:system/core/sdcard/sdcard.c **** }
1474 .loc 1 381 0
1475 00b0 2046 mov r0, r4
1476 00b2 BDE8F88F pop {r3, r4, r5, r6, r7, r8, r9, sl, fp, pc}
1477 .L103:
1478 00b6 00BF .align 2
1479 .L102:
1480 00b8 94000000 .word _GLOBAL_OFFSET_TABLE_-(.LPIC13+4)
1481 00bc 00000000 .word __sF(GOT)
1482 00c0 44000000 .word .LC7-(.LPIC14+4)
1483 .cfi_endproc
1484 .LFE148:
1485 .fnend
1487 .section .text.lookup_node_and_path_by_id_locked.constprop.28,"ax",%progbits
1488 .align 1
1489 .thumb
1490 .thumb_func
1492 lookup_node_and_path_by_id_locked.constprop.28:
1493 .fnstart
1494 .LFB147:
647:system/core/sdcard/sdcard.c **** static struct node* lookup_node_and_path_by_id_locked(struct fuse* fuse, __u64 nid,
1495 .loc 1 647 0
1496 .cfi_startproc
1497 @ args = 4, pretend = 0, frame = 0
1498 @ frame_needed = 0, uses_anonymous_args = 0
1499 .LVL151:
1500 .LBB306:
1501 .LBB307:
640:system/core/sdcard/sdcard.c **** if (nid == FUSE_ROOT_ID) {
1502 .loc 1 640 0
1503 0000 002B cmp r3, #0
1504 0002 08BF it eq
1505 0004 012A cmpeq r2, #1
1506 .LBE307:
1507 .LBE306:
647:system/core/sdcard/sdcard.c **** static struct node* lookup_node_and_path_by_id_locked(struct fuse* fuse, __u64 nid,
1508 .loc 1 647 0
1509 0006 10B5 push {r4, lr}
1510 .save {r4, lr}
1511 .LCFI20:
1512 .cfi_def_cfa_offset 8
1513 .cfi_offset 4, -8
1514 .cfi_offset 14, -4
1515 .LBB311:
1516 .LBB310:
641:system/core/sdcard/sdcard.c **** return &fuse->root;
1517 .loc 1 641 0
1518 0008 0CBF ite eq
1519 000a 00F12004 addeq r4, r0, #32
1520 .LBB308:
1521 .LBB309:
241:system/core/sdcard/sdcard.c **** return (void *) (uintptr_t) nid;
1522 .loc 1 241 0
1523 000e 1446 movne r4, r2
ARM GAS /tmp/cc3I8rcL.s page 67
1524 .LBE309:
1525 .LBE308:
1526 .LBE310:
1527 .LBE311:
651:system/core/sdcard/sdcard.c **** if (node && get_node_path_locked(node, buf, bufsize) < 0) {
1528 .loc 1 651 0
1529 0010 3CB1 cbz r4, .L107
1530 0012 2046 mov r0, r4
1531 .LVL152:
1532 0014 0299 ldr r1, [sp, #8]
1533 0016 4FF48052 mov r2, #4096
1534 .LVL153:
1535 001a FFF7FEFF bl get_node_path_locked(PLT)
1536 .LVL154:
652:system/core/sdcard/sdcard.c **** node = NULL;
1537 .loc 1 652 0
1538 001e 24EAE074 bic r4, r4, r0, asr #31
1539 .L107:
1540 .LVL155:
655:system/core/sdcard/sdcard.c **** }
1541 .loc 1 655 0
1542 0022 2046 mov r0, r4
1543 0024 10BD pop {r4, pc}
1544 .cfi_endproc
1545 .LFE147:
1546 .fnend
1548 .section .text.handle_rmdir.isra.16,"ax",%progbits
1549 .align 1
1550 .thumb
1551 .thumb_func
1553 handle_rmdir.isra.16:
1554 .fnstart
1555 .LFB137:
1051:system/core/sdcard/sdcard.c **** static int handle_rmdir(struct fuse* fuse, struct fuse_handler* handler,
1556 .loc 1 1051 0
1557 .cfi_startproc
1558 @ args = 0, pretend = 0, frame = 8200
1559 @ frame_needed = 0, uses_anonymous_args = 0
1560 .LVL156:
1561 0000 2E4B ldr r3, .L122
1562 0002 2DE9F047 push {r4, r5, r6, r7, r8, r9, sl, lr}
1563 .save {r4, r5, r6, r7, r8, r9, sl, lr}
1564 .LCFI21:
1565 .cfi_def_cfa_offset 32
1566 .cfi_offset 4, -32
1567 .cfi_offset 5, -28
1568 .cfi_offset 6, -24
1569 .cfi_offset 7, -20
1570 .cfi_offset 8, -16
1571 .cfi_offset 9, -12
1572 .cfi_offset 10, -8
1573 .cfi_offset 14, -4
1574 0006 1646 mov r6, r2
1575 0008 2D4A ldr r2, .L122+4
1576 .LVL157:
1577 .pad #8192
1578 000a ADF5005D sub sp, sp, #8192
ARM GAS /tmp/cc3I8rcL.s page 68
1579 .LCFI22:
1580 .cfi_def_cfa_offset 8224
1581 000e 0D46 mov r5, r1
1582 .pad #16
1583 0010 84B0 sub sp, sp, #16
1584 .LCFI23:
1585 .cfi_def_cfa_offset 8240
1051:system/core/sdcard/sdcard.c **** static int handle_rmdir(struct fuse* fuse, struct fuse_handler* handler,
1586 .loc 1 1051 0
1587 0012 0446 mov r4, r0
1588 .LPIC15:
1589 0014 7B44 add r3, pc
1590 0016 0DF50051 add r1, sp, #8192
1591 .LVL158:
1592 001a 0C31 adds r1, r1, #12
1062:system/core/sdcard/sdcard.c **** parent_path, sizeof(parent_path));
1593 .loc 1 1062 0
1594 001c 0DF10C0A add sl, sp, #12
1051:system/core/sdcard/sdcard.c **** static int handle_rmdir(struct fuse* fuse, struct fuse_handler* handler,
1595 .loc 1 1051 0
1596 0020 53F80280 ldr r8, [r3, r2]
1597 0024 D8F80030 ldr r3, [r8, #0]
1598 0028 0B60 str r3, [r1, #0]
1599 .LVL159:
1059:system/core/sdcard/sdcard.c **** pthread_mutex_lock(&fuse->lock);
1600 .loc 1 1059 0
1601 002a FFF7FEFF bl pthread_mutex_lock(PLT)
1602 .LVL160:
1060:system/core/sdcard/sdcard.c **** has_rw = get_caller_has_rw_locked(fuse, hdr);
1603 .loc 1 1060 0
1604 002e 2946 mov r1, r5
1605 0030 2046 mov r0, r4
1606 0032 FFF7FEFF bl get_caller_has_rw_locked(PLT)
1607 .LVL161:
1608 0036 8146 mov r9, r0
1609 .LVL162:
1061:system/core/sdcard/sdcard.c **** parent_node = lookup_node_and_path_by_id_locked(fuse, hdr->nodeid,
1610 .loc 1 1061 0
1611 0038 D5E90423 ldrd r2, [r5, #16]
1612 003c CDF800A0 str sl, [sp, #0]
1613 0040 2046 mov r0, r4
1614 .LVL163:
1615 0042 FFF7FEFF bl lookup_node_and_path_by_id_locked.constprop.28(PLT)
1616 .LVL164:
1617 0046 0746 mov r7, r0
1618 .LVL165:
1065:system/core/sdcard/sdcard.c **** pthread_mutex_unlock(&fuse->lock);
1619 .loc 1 1065 0
1620 0048 2046 mov r0, r4
1621 .LVL166:
1622 004a FFF7FEFF bl pthread_mutex_unlock(PLT)
1623 .LVL167:
1067:system/core/sdcard/sdcard.c **** if (!parent_node || !find_file_within(parent_path, name,
1624 .loc 1 1067 0
1625 004e 17B9 cbnz r7, .L113
1626 .L115:
1069:system/core/sdcard/sdcard.c **** return -ENOENT;
ARM GAS /tmp/cc3I8rcL.s page 69
1627 .loc 1 1069 0
1628 0050 6FF00100 mvn r0, #1
1629 0054 23E0 b .L114
1630 .L113:
1067:system/core/sdcard/sdcard.c **** if (!parent_node || !find_file_within(parent_path, name,
1631 .loc 1 1067 0
1632 0056 0DF58052 add r2, sp, #4096
1633 005a 5046 mov r0, sl
1634 005c 3146 mov r1, r6
1635 005e 0C32 adds r2, r2, #12
1636 0060 0123 movs r3, #1
1637 0062 FFF7FEFF bl find_file_within.constprop.27(PLT)
1638 .LVL168:
1639 0066 0028 cmp r0, #0
1640 0068 F2D0 beq .L115
1071:system/core/sdcard/sdcard.c **** if (!check_caller_access_to_name(fuse, hdr, parent_node, name, W_OK, has_rw)) {
1641 .loc 1 1071 0
1642 006a 0223 movs r3, #2
1643 006c 2046 mov r0, r4
1644 006e 2946 mov r1, r5
1645 0070 3A46 mov r2, r7
1646 0072 8DE80802 stmia sp, {r3, r9}
1647 0076 3346 mov r3, r6
1648 0078 FFF7FEFF bl check_caller_access_to_name(PLT)
1649 .LVL169:
1650 007c 58B1 cbz r0, .L117
1074:system/core/sdcard/sdcard.c **** if (rmdir(child_path) < 0) {
1651 .loc 1 1074 0
1652 007e 0DF58050 add r0, sp, #4096
1653 0082 0C30 adds r0, r0, #12
1654 0084 FFF7FEFF bl rmdir(PLT)
1655 .LVL170:
1656 0088 0028 cmp r0, #0
1657 008a 07DA bge .L118
1075:system/core/sdcard/sdcard.c **** return -errno;
1658 .loc 1 1075 0
1659 008c FFF7FEFF bl __errno(PLT)
1660 .LVL171:
1661 0090 0068 ldr r0, [r0, #0]
1662 0092 4042 negs r0, r0
1663 0094 03E0 b .L114
1664 .L117:
1072:system/core/sdcard/sdcard.c **** return -EACCES;
1665 .loc 1 1072 0
1666 0096 6FF00C00 mvn r0, #12
1667 009a 00E0 b .L114
1668 .L118:
1077:system/core/sdcard/sdcard.c **** return 0;
1669 .loc 1 1077 0
1670 009c 0020 movs r0, #0
1671 .L114:
1078:system/core/sdcard/sdcard.c **** }
1672 .loc 1 1078 0
1673 009e 0DF50052 add r2, sp, #8192
1674 00a2 0C32 adds r2, r2, #12
1675 00a4 1168 ldr r1, [r2, #0]
1676 00a6 D8F80030 ldr r3, [r8, #0]
ARM GAS /tmp/cc3I8rcL.s page 70
1677 00aa 9942 cmp r1, r3
1678 00ac 01D0 beq .L116
1679 00ae FFF7FEFF bl __stack_chk_fail(PLT)
1680 .LVL172:
1681 .L116:
1682 00b2 04B0 add sp, sp, #16
1683 00b4 0DF5005D add sp, sp, #8192
1684 00b8 BDE8F087 pop {r4, r5, r6, r7, r8, r9, sl, pc}
1685 .L123:
1686 .align 2
1687 .L122:
1688 00bc A4000000 .word _GLOBAL_OFFSET_TABLE_-(.LPIC15+4)
1689 00c0 00000000 .word __stack_chk_guard(GOT)
1690 .cfi_endproc
1691 .LFE137:
1692 .fnend
1694 .section .text.handle_unlink.isra.15,"ax",%progbits
1695 .align 1
1696 .thumb
1697 .thumb_func
1699 handle_unlink.isra.15:
1700 .fnstart
1701 .LFB136:
1022:system/core/sdcard/sdcard.c **** static int handle_unlink(struct fuse* fuse, struct fuse_handler* handler,
1702 .loc 1 1022 0
1703 .cfi_startproc
1704 @ args = 0, pretend = 0, frame = 8200
1705 @ frame_needed = 0, uses_anonymous_args = 0
1706 .LVL173:
1707 0000 2E4B ldr r3, .L134
1708 0002 2DE9F047 push {r4, r5, r6, r7, r8, r9, sl, lr}
1709 .save {r4, r5, r6, r7, r8, r9, sl, lr}
1710 .LCFI24:
1711 .cfi_def_cfa_offset 32
1712 .cfi_offset 4, -32
1713 .cfi_offset 5, -28
1714 .cfi_offset 6, -24
1715 .cfi_offset 7, -20
1716 .cfi_offset 8, -16
1717 .cfi_offset 9, -12
1718 .cfi_offset 10, -8
1719 .cfi_offset 14, -4
1720 0006 1646 mov r6, r2
1721 0008 2D4A ldr r2, .L134+4
1722 .LVL174:
1723 .pad #8192
1724 000a ADF5005D sub sp, sp, #8192
1725 .LCFI25:
1726 .cfi_def_cfa_offset 8224
1727 000e 0D46 mov r5, r1
1728 .pad #16
1729 0010 84B0 sub sp, sp, #16
1730 .LCFI26:
1731 .cfi_def_cfa_offset 8240
1022:system/core/sdcard/sdcard.c **** static int handle_unlink(struct fuse* fuse, struct fuse_handler* handler,
1732 .loc 1 1022 0
1733 0012 0446 mov r4, r0
ARM GAS /tmp/cc3I8rcL.s page 71
1734 .LPIC16:
1735 0014 7B44 add r3, pc
1736 0016 0DF50051 add r1, sp, #8192
1737 .LVL175:
1738 001a 0C31 adds r1, r1, #12
1033:system/core/sdcard/sdcard.c **** parent_path, sizeof(parent_path));
1739 .loc 1 1033 0
1740 001c 0DF10C0A add sl, sp, #12
1022:system/core/sdcard/sdcard.c **** static int handle_unlink(struct fuse* fuse, struct fuse_handler* handler,
1741 .loc 1 1022 0
1742 0020 53F80280 ldr r8, [r3, r2]
1743 0024 D8F80030 ldr r3, [r8, #0]
1744 0028 0B60 str r3, [r1, #0]
1745 .LVL176:
1030:system/core/sdcard/sdcard.c **** pthread_mutex_lock(&fuse->lock);
1746 .loc 1 1030 0
1747 002a FFF7FEFF bl pthread_mutex_lock(PLT)
1748 .LVL177:
1031:system/core/sdcard/sdcard.c **** has_rw = get_caller_has_rw_locked(fuse, hdr);
1749 .loc 1 1031 0
1750 002e 2946 mov r1, r5
1751 0030 2046 mov r0, r4
1752 0032 FFF7FEFF bl get_caller_has_rw_locked(PLT)
1753 .LVL178:
1754 0036 8146 mov r9, r0
1755 .LVL179:
1032:system/core/sdcard/sdcard.c **** parent_node = lookup_node_and_path_by_id_locked(fuse, hdr->nodeid,
1756 .loc 1 1032 0
1757 0038 D5E90423 ldrd r2, [r5, #16]
1758 003c CDF800A0 str sl, [sp, #0]
1759 0040 2046 mov r0, r4
1760 .LVL180:
1761 0042 FFF7FEFF bl lookup_node_and_path_by_id_locked.constprop.28(PLT)
1762 .LVL181:
1763 0046 0746 mov r7, r0
1764 .LVL182:
1036:system/core/sdcard/sdcard.c **** pthread_mutex_unlock(&fuse->lock);
1765 .loc 1 1036 0
1766 0048 2046 mov r0, r4
1767 .LVL183:
1768 004a FFF7FEFF bl pthread_mutex_unlock(PLT)
1769 .LVL184:
1038:system/core/sdcard/sdcard.c **** if (!parent_node || !find_file_within(parent_path, name,
1770 .loc 1 1038 0
1771 004e 17B9 cbnz r7, .L125
1772 .L127:
1040:system/core/sdcard/sdcard.c **** return -ENOENT;
1773 .loc 1 1040 0
1774 0050 6FF00100 mvn r0, #1
1775 0054 23E0 b .L126
1776 .L125:
1038:system/core/sdcard/sdcard.c **** if (!parent_node || !find_file_within(parent_path, name,
1777 .loc 1 1038 0
1778 0056 0DF58052 add r2, sp, #4096
1779 005a 5046 mov r0, sl
1780 005c 3146 mov r1, r6
1781 005e 0C32 adds r2, r2, #12
ARM GAS /tmp/cc3I8rcL.s page 72
1782 0060 0123 movs r3, #1
1783 0062 FFF7FEFF bl find_file_within.constprop.27(PLT)
1784 .LVL185:
1785 0066 0028 cmp r0, #0
1786 0068 F2D0 beq .L127
1042:system/core/sdcard/sdcard.c **** if (!check_caller_access_to_name(fuse, hdr, parent_node, name, W_OK, has_rw)) {
1787 .loc 1 1042 0
1788 006a 0223 movs r3, #2
1789 006c 2046 mov r0, r4
1790 006e 2946 mov r1, r5
1791 0070 3A46 mov r2, r7
1792 0072 8DE80802 stmia sp, {r3, r9}
1793 0076 3346 mov r3, r6
1794 0078 FFF7FEFF bl check_caller_access_to_name(PLT)
1795 .LVL186:
1796 007c 58B1 cbz r0, .L129
1045:system/core/sdcard/sdcard.c **** if (unlink(child_path) < 0) {
1797 .loc 1 1045 0
1798 007e 0DF58050 add r0, sp, #4096
1799 0082 0C30 adds r0, r0, #12
1800 0084 FFF7FEFF bl unlink(PLT)
1801 .LVL187:
1802 0088 0028 cmp r0, #0
1803 008a 07DA bge .L130
1046:system/core/sdcard/sdcard.c **** return -errno;
1804 .loc 1 1046 0
1805 008c FFF7FEFF bl __errno(PLT)
1806 .LVL188:
1807 0090 0068 ldr r0, [r0, #0]
1808 0092 4042 negs r0, r0
1809 0094 03E0 b .L126
1810 .L129:
1043:system/core/sdcard/sdcard.c **** return -EACCES;
1811 .loc 1 1043 0
1812 0096 6FF00C00 mvn r0, #12
1813 009a 00E0 b .L126
1814 .L130:
1048:system/core/sdcard/sdcard.c **** return 0;
1815 .loc 1 1048 0
1816 009c 0020 movs r0, #0
1817 .L126:
1049:system/core/sdcard/sdcard.c **** }
1818 .loc 1 1049 0
1819 009e 0DF50052 add r2, sp, #8192
1820 00a2 0C32 adds r2, r2, #12
1821 00a4 1168 ldr r1, [r2, #0]
1822 00a6 D8F80030 ldr r3, [r8, #0]
1823 00aa 9942 cmp r1, r3
1824 00ac 01D0 beq .L128
1825 00ae FFF7FEFF bl __stack_chk_fail(PLT)
1826 .LVL189:
1827 .L128:
1828 00b2 04B0 add sp, sp, #16
1829 00b4 0DF5005D add sp, sp, #8192
1830 00b8 BDE8F087 pop {r4, r5, r6, r7, r8, r9, sl, pc}
1831 .L135:
1832 .align 2
ARM GAS /tmp/cc3I8rcL.s page 73
1833 .L134:
1834 00bc A4000000 .word _GLOBAL_OFFSET_TABLE_-(.LPIC16+4)
1835 00c0 00000000 .word __stack_chk_guard(GOT)
1836 .cfi_endproc
1837 .LFE136:
1838 .fnend
1840 .section .text.handle_open.isra.14,"ax",%progbits
1841 .align 1
1842 .thumb
1843 .thumb_func
1845 handle_open.isra.14:
1846 .fnstart
1847 .LFB135:
1173:system/core/sdcard/sdcard.c **** static int handle_open(struct fuse* fuse, struct fuse_handler* handler,
1848 .loc 1 1173 0
1849 .cfi_startproc
1850 @ args = 0, pretend = 0, frame = 4120
1851 @ frame_needed = 0, uses_anonymous_args = 0
1852 .LVL190:
1853 0000 3C4B ldr r3, .L146
1854 0002 2DE9F04F push {r4, r5, r6, r7, r8, r9, sl, fp, lr}
1855 .save {r4, r5, r6, r7, r8, r9, sl, fp, lr}
1856 .LCFI27:
1857 .cfi_def_cfa_offset 36
1858 .cfi_offset 4, -36
1859 .cfi_offset 5, -32
1860 .cfi_offset 6, -28
1861 .cfi_offset 7, -24
1862 .cfi_offset 8, -20
1863 .cfi_offset 9, -16
1864 .cfi_offset 10, -12
1865 .cfi_offset 11, -8
1866 .cfi_offset 14, -4
1867 0006 1646 mov r6, r2
1868 0008 3B4A ldr r2, .L146+4
1869 .LVL191:
1870 .pad #4128
1871 000a ADF5815D sub sp, sp, #4128
1872 .LCFI28:
1873 .cfi_def_cfa_offset 4164
1874 000e 0D46 mov r5, r1
1875 .pad #4
1876 0010 81B0 sub sp, sp, #4
1877 .LCFI29:
1878 .cfi_def_cfa_offset 4168
1173:system/core/sdcard/sdcard.c **** static int handle_open(struct fuse* fuse, struct fuse_handler* handler,
1879 .loc 1 1173 0
1880 0012 0446 mov r4, r0
1881 .LPIC17:
1882 0014 7B44 add r3, pc
1883 0016 0DF58051 add r1, sp, #4096
1884 .LVL192:
1885 001a 1C31 adds r1, r1, #28
1184:system/core/sdcard/sdcard.c **** node = lookup_node_and_path_by_id_locked(fuse, hdr->nodeid, path, sizeof(path));
1886 .loc 1 1184 0
1887 001c 0DF11C09 add r9, sp, #28
1173:system/core/sdcard/sdcard.c **** static int handle_open(struct fuse* fuse, struct fuse_handler* handler,
ARM GAS /tmp/cc3I8rcL.s page 74
1888 .loc 1 1173 0
1889 0020 9F58 ldr r7, [r3, r2]
1890 0022 3B68 ldr r3, [r7, #0]
1891 0024 B846 mov r8, r7
1892 0026 0B60 str r3, [r1, #0]
1893 .LVL193:
1182:system/core/sdcard/sdcard.c **** pthread_mutex_lock(&fuse->lock);
1894 .loc 1 1182 0
1895 0028 FFF7FEFF bl pthread_mutex_lock(PLT)
1896 .LVL194:
1183:system/core/sdcard/sdcard.c **** has_rw = get_caller_has_rw_locked(fuse, hdr);
1897 .loc 1 1183 0
1898 002c 2946 mov r1, r5
1899 002e 2046 mov r0, r4
1900 0030 FFF7FEFF bl get_caller_has_rw_locked(PLT)
1901 .LVL195:
1902 0034 8246 mov sl, r0
1903 .LVL196:
1184:system/core/sdcard/sdcard.c **** node = lookup_node_and_path_by_id_locked(fuse, hdr->nodeid, path, sizeof(path));
1904 .loc 1 1184 0
1905 0036 D5E90423 ldrd r2, [r5, #16]
1906 003a CDF80090 str r9, [sp, #0]
1907 003e 2046 mov r0, r4
1908 .LVL197:
1909 0040 FFF7FEFF bl lookup_node_and_path_by_id_locked.constprop.28(PLT)
1910 .LVL198:
1911 0044 8346 mov fp, r0
1912 .LVL199:
1187:system/core/sdcard/sdcard.c **** pthread_mutex_unlock(&fuse->lock);
1913 .loc 1 1187 0
1914 0046 2046 mov r0, r4
1915 .LVL200:
1916 0048 FFF7FEFF bl pthread_mutex_unlock(PLT)
1917 .LVL201:
1189:system/core/sdcard/sdcard.c **** if (!node) {
1918 .loc 1 1189 0
1919 004c BBF1000F cmp fp, #0
1920 0050 38D0 beq .L141
1193:system/core/sdcard/sdcard.c **** open_flags_to_access_mode(req->flags), has_rw)) {
1921 .loc 1 1193 0
1922 0052 3768 ldr r7, [r6, #0]
1923 .LVL202:
1924 .LBB320:
1925 .LBB321:
1163:system/core/sdcard/sdcard.c **** if ((open_flags & O_ACCMODE) == O_RDONLY) {
1926 .loc 1 1163 0
1927 0054 17F00300 ands r0, r7, #3
1928 0058 04D0 beq .L142
1166:system/core/sdcard/sdcard.c **** return W_OK;
1929 .loc 1 1166 0
1930 005a 0128 cmp r0, #1
1931 005c 14BF ite ne
1932 005e 0623 movne r3, #6
1933 0060 0223 moveq r3, #2
1934 0062 00E0 b .L138
1935 .L142:
1164:system/core/sdcard/sdcard.c **** return R_OK;
ARM GAS /tmp/cc3I8rcL.s page 75
1936 .loc 1 1164 0
1937 0064 0423 movs r3, #4
1938 .L138:
1939 .LVL203:
1940 .LBE321:
1941 .LBE320:
1942 .LBB322:
1943 .LBB323:
559:system/core/sdcard/sdcard.c **** return check_caller_access_to_name(fuse, hdr, node->parent, node->name, mode, has_rw);
1944 .loc 1 559 0
1945 0066 8DE80804 stmia sp, {r3, sl}
1946 006a 2046 mov r0, r4
1947 006c 2946 mov r1, r5
1948 006e DBF83420 ldr r2, [fp, #52]
1949 0072 DBF83C30 ldr r3, [fp, #60]
1950 .LVL204:
1951 0076 FFF7FEFF bl check_caller_access_to_name(PLT)
1952 .LVL205:
1953 .LBE323:
1954 .LBE322:
1192:system/core/sdcard/sdcard.c **** if (!check_caller_access_to_node(fuse, hdr, node,
1955 .loc 1 1192 0
1956 007a 30B3 cbz r0, .L144
1196:system/core/sdcard/sdcard.c **** h = malloc(sizeof(*h));
1957 .loc 1 1196 0
1958 007c 0420 movs r0, #4
1959 007e FFF7FEFF bl malloc(PLT)
1960 .LVL206:
1197:system/core/sdcard/sdcard.c **** if (!h) {
1961 .loc 1 1197 0
1962 0082 0646 mov r6, r0
1963 .LVL207:
1964 0084 20B3 cbz r0, .L145
1965 .LVL208:
1966 .LBB324:
1967 .LBB325:
72:bionic/libc/include/fcntl.h **** return __open_2(pathname, flags);
1968 .loc 3 72 0
1969 0086 4846 mov r0, r9
1970 .LVL209:
1971 0088 3946 mov r1, r7
1972 008a FFF7FEFF bl __open_2(PLT)
1973 .LVL210:
1974 .LBE325:
1975 .LBE324:
1202:system/core/sdcard/sdcard.c **** if (h->fd < 0) {
1976 .loc 1 1202 0
1977 008e 0028 cmp r0, #0
1201:system/core/sdcard/sdcard.c **** h->fd = open(path, req->flags);
1978 .loc 1 1201 0
1979 0090 3060 str r0, [r6, #0]
1202:system/core/sdcard/sdcard.c **** if (h->fd < 0) {
1980 .loc 1 1202 0
1981 0092 07DA bge .L139
1203:system/core/sdcard/sdcard.c **** free(h);
1982 .loc 1 1203 0
1983 0094 3046 mov r0, r6
ARM GAS /tmp/cc3I8rcL.s page 76
1984 0096 FFF7FEFF bl free(PLT)
1985 .LVL211:
1204:system/core/sdcard/sdcard.c **** return -errno;
1986 .loc 1 1204 0
1987 009a FFF7FEFF bl __errno(PLT)
1988 .LVL212:
1989 009e 0368 ldr r3, [r0, #0]
1990 00a0 5842 negs r0, r3
1991 00a2 17E0 b .L137
1992 .L139:
1993 .LVL213:
1994 .LBB326:
1995 .LBB327:
246:system/core/sdcard/sdcard.c **** return (__u64) (uintptr_t) ptr;
1996 .loc 1 246 0
1997 00a4 0022 movs r2, #0
1998 .LBE327:
1999 .LBE326:
1206:system/core/sdcard/sdcard.c **** out.fh = ptr_to_id(h);
2000 .loc 1 1206 0
2001 00a6 02A9 add r1, sp, #8
2002 .LBB330:
2003 .LBB328:
246:system/core/sdcard/sdcard.c **** return (__u64) (uintptr_t) ptr;
2004 .loc 1 246 0
2005 00a8 0296 str r6, [sp, #8]
2006 .LBE328:
2007 .LBE330:
1209:system/core/sdcard/sdcard.c **** fuse_reply(fuse, hdr->unique, &out, sizeof(out));
2008 .loc 1 1209 0
2009 00aa 1020 movs r0, #16
2010 .LBB331:
2011 .LBB329:
246:system/core/sdcard/sdcard.c **** return (__u64) (uintptr_t) ptr;
2012 .loc 1 246 0
2013 00ac 0392 str r2, [sp, #12]
2014 .LBE329:
2015 .LBE331:
1207:system/core/sdcard/sdcard.c **** out.open_flags = 0;
2016 .loc 1 1207 0
2017 00ae 0492 str r2, [sp, #16]
1208:system/core/sdcard/sdcard.c **** out.padding = 0;
2018 .loc 1 1208 0
2019 00b0 0592 str r2, [sp, #20]
1209:system/core/sdcard/sdcard.c **** fuse_reply(fuse, hdr->unique, &out, sizeof(out));
2020 .loc 1 1209 0
2021 00b2 D5E90223 ldrd r2, [r5, #8]
2022 00b6 0190 str r0, [sp, #4]
2023 00b8 2046 mov r0, r4
2024 00ba 0091 str r1, [sp, #0]
2025 00bc FFF7FEFF bl fuse_reply(PLT)
2026 .LVL214:
1210:system/core/sdcard/sdcard.c **** return NO_STATUS;
2027 .loc 1 1210 0
2028 00c0 0120 movs r0, #1
2029 00c2 07E0 b .L137
2030 .LVL215:
ARM GAS /tmp/cc3I8rcL.s page 77
2031 .L141:
1190:system/core/sdcard/sdcard.c **** return -ENOENT;
2032 .loc 1 1190 0
2033 00c4 6FF00100 mvn r0, #1
2034 00c8 04E0 b .L137
2035 .LVL216:
2036 .L144:
1194:system/core/sdcard/sdcard.c **** return -EACCES;
2037 .loc 1 1194 0
2038 00ca 6FF00C00 mvn r0, #12
2039 00ce 01E0 b .L137
2040 .LVL217:
2041 .L145:
1198:system/core/sdcard/sdcard.c **** return -ENOMEM;
2042 .loc 1 1198 0
2043 00d0 6FF00B00 mvn r0, #11
2044 .LVL218:
2045 .L137:
1211:system/core/sdcard/sdcard.c **** }
2046 .loc 1 1211 0
2047 00d4 0DF58051 add r1, sp, #4096
2048 00d8 1C31 adds r1, r1, #28
2049 00da 0A68 ldr r2, [r1, #0]
2050 00dc D8F80030 ldr r3, [r8, #0]
2051 00e0 9A42 cmp r2, r3
2052 00e2 01D0 beq .L140
2053 00e4 FFF7FEFF bl __stack_chk_fail(PLT)
2054 .LVL219:
2055 .L140:
2056 00e8 09B0 add sp, sp, #36
2057 00ea 0DF5805D add sp, sp, #4096
2058 00ee BDE8F08F pop {r4, r5, r6, r7, r8, r9, sl, fp, pc}
2059 .L147:
2060 00f2 00BF .align 2
2061 .L146:
2062 00f4 DC000000 .word _GLOBAL_OFFSET_TABLE_-(.LPIC17+4)
2063 00f8 00000000 .word __stack_chk_guard(GOT)
2064 .cfi_endproc
2065 .LFE135:
2066 .fnend
2068 .section .text.handle_opendir.isra.10,"ax",%progbits
2069 .align 1
2070 .thumb
2071 .thumb_func
2073 handle_opendir.isra.10:
2074 .fnstart
2075 .LFB131:
1323:system/core/sdcard/sdcard.c **** static int handle_opendir(struct fuse* fuse, struct fuse_handler* handler,
2076 .loc 1 1323 0
2077 .cfi_startproc
2078 @ args = 0, pretend = 0, frame = 4120
2079 @ frame_needed = 0, uses_anonymous_args = 0
2080 .LVL220:
2081 0000 324B ldr r3, .L155
2082 0002 334A ldr r2, .L155+4
2083 0004 2DE9F047 push {r4, r5, r6, r7, r8, r9, sl, lr}
2084 .save {r4, r5, r6, r7, r8, r9, sl, lr}
ARM GAS /tmp/cc3I8rcL.s page 78
2085 .LCFI30:
2086 .cfi_def_cfa_offset 32
2087 .cfi_offset 4, -32
2088 .cfi_offset 5, -28
2089 .cfi_offset 6, -24
2090 .cfi_offset 7, -20
2091 .cfi_offset 8, -16
2092 .cfi_offset 9, -12
2093 .cfi_offset 10, -8
2094 .cfi_offset 14, -4
2095 .pad #4128
2096 0008 ADF5815D sub sp, sp, #4128
2097 .LCFI31:
2098 .cfi_def_cfa_offset 4160
1323:system/core/sdcard/sdcard.c **** static int handle_opendir(struct fuse* fuse, struct fuse_handler* handler,
2099 .loc 1 1323 0
2100 000c 0F46 mov r7, r1
2101 000e 0DF58051 add r1, sp, #4096
2102 .LVL221:
2103 .LPIC18:
2104 0012 7B44 add r3, pc
2105 0014 1C31 adds r1, r1, #28
2106 0016 9D58 ldr r5, [r3, r2]
1332:system/core/sdcard/sdcard.c **** node = lookup_node_and_path_by_id_locked(fuse, hdr->nodeid, path, sizeof(path));
2107 .loc 1 1332 0
2108 0018 0DF11C09 add r9, sp, #28
1323:system/core/sdcard/sdcard.c **** static int handle_opendir(struct fuse* fuse, struct fuse_handler* handler,
2109 .loc 1 1323 0
2110 001c 0446 mov r4, r0
2111 001e 2B68 ldr r3, [r5, #0]
2112 0020 A846 mov r8, r5
2113 0022 0B60 str r3, [r1, #0]
2114 .LVL222:
1331:system/core/sdcard/sdcard.c **** pthread_mutex_lock(&fuse->lock);
2115 .loc 1 1331 0
2116 0024 FFF7FEFF bl pthread_mutex_lock(PLT)
2117 .LVL223:
1332:system/core/sdcard/sdcard.c **** node = lookup_node_and_path_by_id_locked(fuse, hdr->nodeid, path, sizeof(path));
2118 .loc 1 1332 0
2119 0028 D7E90423 ldrd r2, [r7, #16]
2120 002c 2046 mov r0, r4
2121 002e CDF80090 str r9, [sp, #0]
2122 0032 FFF7FEFF bl lookup_node_and_path_by_id_locked.constprop.28(PLT)
2123 .LVL224:
2124 0036 0646 mov r6, r0
2125 .LVL225:
1335:system/core/sdcard/sdcard.c **** pthread_mutex_unlock(&fuse->lock);
2126 .loc 1 1335 0
2127 0038 2046 mov r0, r4
2128 .LVL226:
2129 003a FFF7FEFF bl pthread_mutex_unlock(PLT)
2130 .LVL227:
1337:system/core/sdcard/sdcard.c **** if (!node) {
2131 .loc 1 1337 0
2132 003e 002E cmp r6, #0
2133 0040 2DD0 beq .L152
2134 .LVL228:
ARM GAS /tmp/cc3I8rcL.s page 79
2135 .LBB336:
2136 .LBB337:
559:system/core/sdcard/sdcard.c **** return check_caller_access_to_name(fuse, hdr, node->parent, node->name, mode, has_rw);
2137 .loc 1 559 0
2138 0042 4FF0040A mov sl, #4
2139 0046 0025 movs r5, #0
2140 0048 2046 mov r0, r4
2141 004a 3946 mov r1, r7
2142 004c CDF800A0 str sl, [sp, #0]
2143 0050 0195 str r5, [sp, #4]
2144 0052 726B ldr r2, [r6, #52]
2145 0054 F36B ldr r3, [r6, #60]
2146 0056 FFF7FEFF bl check_caller_access_to_name(PLT)
2147 .LVL229:
2148 .LBE337:
2149 .LBE336:
1340:system/core/sdcard/sdcard.c **** if (!check_caller_access_to_node(fuse, hdr, node, R_OK, false)) {
2150 .loc 1 1340 0
2151 005a 18B3 cbz r0, .L153
1343:system/core/sdcard/sdcard.c **** h = malloc(sizeof(*h));
2152 .loc 1 1343 0
2153 005c 5046 mov r0, sl
2154 005e FFF7FEFF bl malloc(PLT)
2155 .LVL230:
1344:system/core/sdcard/sdcard.c **** if (!h) {
2156 .loc 1 1344 0
2157 0062 0646 mov r6, r0
2158 .LVL231:
2159 0064 08B3 cbz r0, .L154
1348:system/core/sdcard/sdcard.c **** h->d = opendir(path);
2160 .loc 1 1348 0
2161 0066 4846 mov r0, r9
2162 .LVL232:
2163 0068 FFF7FEFF bl opendir(PLT)
2164 .LVL233:
2165 006c 3060 str r0, [r6, #0]
1349:system/core/sdcard/sdcard.c **** if (!h->d) {
2166 .loc 1 1349 0
2167 006e 38B9 cbnz r0, .L150
1350:system/core/sdcard/sdcard.c **** free(h);
2168 .loc 1 1350 0
2169 0070 3046 mov r0, r6
2170 0072 FFF7FEFF bl free(PLT)
2171 .LVL234:
1351:system/core/sdcard/sdcard.c **** return -errno;
2172 .loc 1 1351 0
2173 0076 FFF7FEFF bl __errno(PLT)
2174 .LVL235:
2175 007a 0268 ldr r2, [r0, #0]
2176 007c 5042 negs r0, r2
2177 007e 16E0 b .L149
2178 .L150:
2179 .LVL236:
1353:system/core/sdcard/sdcard.c **** out.fh = ptr_to_id(h);
2180 .loc 1 1353 0
2181 0080 02A8 add r0, sp, #8
1356:system/core/sdcard/sdcard.c **** fuse_reply(fuse, hdr->unique, &out, sizeof(out));
ARM GAS /tmp/cc3I8rcL.s page 80
2182 .loc 1 1356 0
2183 0082 1021 movs r1, #16
2184 0084 D7E90223 ldrd r2, [r7, #8]
2185 .LBB338:
2186 .LBB339:
246:system/core/sdcard/sdcard.c **** return (__u64) (uintptr_t) ptr;
2187 .loc 1 246 0
2188 0088 0296 str r6, [sp, #8]
2189 .LBE339:
2190 .LBE338:
1356:system/core/sdcard/sdcard.c **** fuse_reply(fuse, hdr->unique, &out, sizeof(out));
2191 .loc 1 1356 0
2192 008a 0090 str r0, [sp, #0]
2193 008c 2046 mov r0, r4
2194 008e 0191 str r1, [sp, #4]
2195 .LBB341:
2196 .LBB340:
246:system/core/sdcard/sdcard.c **** return (__u64) (uintptr_t) ptr;
2197 .loc 1 246 0
2198 0090 0395 str r5, [sp, #12]
2199 .LBE340:
2200 .LBE341:
1354:system/core/sdcard/sdcard.c **** out.open_flags = 0;
2201 .loc 1 1354 0
2202 0092 0495 str r5, [sp, #16]
1355:system/core/sdcard/sdcard.c **** out.padding = 0;
2203 .loc 1 1355 0
2204 0094 0595 str r5, [sp, #20]
1356:system/core/sdcard/sdcard.c **** fuse_reply(fuse, hdr->unique, &out, sizeof(out));
2205 .loc 1 1356 0
2206 0096 FFF7FEFF bl fuse_reply(PLT)
2207 .LVL237:
1357:system/core/sdcard/sdcard.c **** return NO_STATUS;
2208 .loc 1 1357 0
2209 009a 0120 movs r0, #1
2210 009c 07E0 b .L149
2211 .LVL238:
2212 .L152:
1338:system/core/sdcard/sdcard.c **** return -ENOENT;
2213 .loc 1 1338 0
2214 009e 6FF00100 mvn r0, #1
2215 00a2 04E0 b .L149
2216 .LVL239:
2217 .L153:
1341:system/core/sdcard/sdcard.c **** return -EACCES;
2218 .loc 1 1341 0
2219 00a4 6FF00C00 mvn r0, #12
2220 00a8 01E0 b .L149
2221 .LVL240:
2222 .L154:
1345:system/core/sdcard/sdcard.c **** return -ENOMEM;
2223 .loc 1 1345 0
2224 00aa 6FF00B00 mvn r0, #11
2225 .LVL241:
2226 .L149:
1358:system/core/sdcard/sdcard.c **** }
2227 .loc 1 1358 0
ARM GAS /tmp/cc3I8rcL.s page 81
2228 00ae 0DF58053 add r3, sp, #4096
2229 00b2 1C33 adds r3, r3, #28
2230 00b4 1968 ldr r1, [r3, #0]
2231 00b6 D8F80020 ldr r2, [r8, #0]
2232 00ba 9142 cmp r1, r2
2233 00bc 01D0 beq .L151
2234 00be FFF7FEFF bl __stack_chk_fail(PLT)
2235 .LVL242:
2236 .L151:
2237 00c2 08B0 add sp, sp, #32
2238 00c4 0DF5805D add sp, sp, #4096
2239 00c8 BDE8F087 pop {r4, r5, r6, r7, r8, r9, sl, pc}
2240 .L156:
2241 .align 2
2242 .L155:
2243 00cc B6000000 .word _GLOBAL_OFFSET_TABLE_-(.LPIC18+4)
2244 00d0 00000000 .word __stack_chk_guard(GOT)
2245 .cfi_endproc
2246 .LFE131:
2247 .fnend
2249 .section .text.fuse_reply_attr,"ax",%progbits
2250 .align 1
2251 .thumb
2252 .thumb_func
2254 fuse_reply_attr:
2255 .fnstart
2256 .LFB88:
797:system/core/sdcard/sdcard.c **** {
2257 .loc 1 797 0
2258 .cfi_startproc
2259 @ args = 8, pretend = 0, frame = 208
2260 @ frame_needed = 0, uses_anonymous_args = 0
2261 .LVL243:
2262 0000 2DE9F043 push {r4, r5, r6, r7, r8, r9, lr}
2263 .save {r4, r5, r6, r7, r8, r9, lr}
2264 .LCFI32:
2265 .cfi_def_cfa_offset 28
2266 .cfi_offset 4, -28
2267 .cfi_offset 5, -24
2268 .cfi_offset 6, -20
2269 .cfi_offset 7, -16
2270 .cfi_offset 8, -12
2271 .cfi_offset 9, -8
2272 .cfi_offset 14, -4
2273 .pad #220
2274 0004 B7B0 sub sp, sp, #220
2275 .LCFI33:
2276 .cfi_def_cfa_offset 248
797:system/core/sdcard/sdcard.c **** {
2277 .loc 1 797 0
2278 0006 8146 mov r9, r0
801:system/core/sdcard/sdcard.c **** if (lstat(path, &s) < 0) {
2279 .loc 1 801 0
2280 0008 1CA9 add r1, sp, #112
2281 000a 3F98 ldr r0, [sp, #252]
2282 .LVL244:
797:system/core/sdcard/sdcard.c **** {
ARM GAS /tmp/cc3I8rcL.s page 82
2283 .loc 1 797 0
2284 000c 1446 mov r4, r2
2285 000e 1D46 mov r5, r3
2286 0010 DDF8F880 ldr r8, [sp, #248]
801:system/core/sdcard/sdcard.c **** if (lstat(path, &s) < 0) {
2287 .loc 1 801 0
2288 0014 FFF7FEFF bl lstat(PLT)
2289 .LVL245:
2290 0018 0028 cmp r0, #0
2291 001a 04DA bge .L158
2292 .LBB350:
2293 .LBB351:
802:system/core/sdcard/sdcard.c **** return -errno;
2294 .loc 1 802 0
2295 001c FFF7FEFF bl __errno(PLT)
2296 .LVL246:
2297 0020 0368 ldr r3, [r0, #0]
2298 0022 5842 negs r0, r3
2299 0024 47E0 b .L159
2300 .L158:
2301 .LVL247:
2302 .LBE351:
2303 .LBE350:
2304 .LBB352:
2305 .LBB353:
804:system/core/sdcard/sdcard.c **** memset(&out, 0, sizeof(out));
2306 .loc 1 804 0
2307 0026 02AF add r7, sp, #8
2308 .LVL248:
144:bionic/libc/include/string.h **** return __builtin___memset_chk(s, c, n, __builtin_object_size (s, 0));
2309 .loc 2 144 0
2310 0028 6826 movs r6, #104
2311 002a 0021 movs r1, #0
2312 002c 3246 mov r2, r6
2313 002e 3846 mov r0, r7
2314 0030 FFF7FEFF bl memset(PLT)
2315 .LVL249:
2316 .LBE353:
2317 .LBE352:
2318 .LBB354:
2319 .LBB355:
385:system/core/sdcard/sdcard.c **** attr->ino = node->nid;
2320 .loc 1 385 0
2321 0034 D8E90223 ldrd r2, [r8, #8]
386:system/core/sdcard/sdcard.c **** attr->size = s->st_size;
2322 .loc 1 386 0
2323 0038 DDE92801 ldrd r0, [sp, #160]
385:system/core/sdcard/sdcard.c **** attr->ino = node->nid;
2324 .loc 1 385 0
2325 003c CDE90623 strd r2, [sp, #24]
387:system/core/sdcard/sdcard.c **** attr->blocks = s->st_blocks;
2326 .loc 1 387 0
2327 0040 DDE92C23 ldrd r2, [sp, #176]
386:system/core/sdcard/sdcard.c **** attr->size = s->st_size;
2328 .loc 1 386 0
2329 0044 CDE90801 strd r0, [sp, #32]
388:system/core/sdcard/sdcard.c **** attr->atime = s->st_atime;
ARM GAS /tmp/cc3I8rcL.s page 83
2330 .loc 1 388 0
2331 0048 2E99 ldr r1, [sp, #184]
389:system/core/sdcard/sdcard.c **** attr->mtime = s->st_mtime;
2332 .loc 1 389 0
2333 004a 3098 ldr r0, [sp, #192]
387:system/core/sdcard/sdcard.c **** attr->blocks = s->st_blocks;
2334 .loc 1 387 0
2335 004c CDE90A23 strd r2, [sp, #40]
388:system/core/sdcard/sdcard.c **** attr->atime = s->st_atime;
2336 .loc 1 388 0
2337 0050 0023 movs r3, #0
390:system/core/sdcard/sdcard.c **** attr->ctime = s->st_ctime;
2338 .loc 1 390 0
2339 0052 329A ldr r2, [sp, #200]
388:system/core/sdcard/sdcard.c **** attr->atime = s->st_atime;
2340 .loc 1 388 0
2341 0054 0C91 str r1, [sp, #48]
392:system/core/sdcard/sdcard.c **** attr->mtimensec = s->st_mtime_nsec;
2342 .loc 1 392 0
2343 0056 3199 ldr r1, [sp, #196]
388:system/core/sdcard/sdcard.c **** attr->atime = s->st_atime;
2344 .loc 1 388 0
2345 0058 0D93 str r3, [sp, #52]
389:system/core/sdcard/sdcard.c **** attr->mtime = s->st_mtime;
2346 .loc 1 389 0
2347 005a 0F93 str r3, [sp, #60]
390:system/core/sdcard/sdcard.c **** attr->ctime = s->st_ctime;
2348 .loc 1 390 0
2349 005c 1193 str r3, [sp, #68]
391:system/core/sdcard/sdcard.c **** attr->atimensec = s->st_atime_nsec;
2350 .loc 1 391 0
2351 005e 2F9B ldr r3, [sp, #188]
389:system/core/sdcard/sdcard.c **** attr->mtime = s->st_mtime;
2352 .loc 1 389 0
2353 0060 0E90 str r0, [sp, #56]
393:system/core/sdcard/sdcard.c **** attr->ctimensec = s->st_ctime_nsec;
2354 .loc 1 393 0
2355 0062 3398 ldr r0, [sp, #204]
390:system/core/sdcard/sdcard.c **** attr->ctime = s->st_ctime;
2356 .loc 1 390 0
2357 0064 1092 str r2, [sp, #64]
394:system/core/sdcard/sdcard.c **** attr->mode = s->st_mode;
2358 .loc 1 394 0
2359 0066 209A ldr r2, [sp, #128]
392:system/core/sdcard/sdcard.c **** attr->mtimensec = s->st_mtime_nsec;
2360 .loc 1 392 0
2361 0068 1391 str r1, [sp, #76]
397:system/core/sdcard/sdcard.c **** attr->uid = node->uid;
2362 .loc 1 397 0
2363 006a D8F82010 ldr r1, [r8, #32]
391:system/core/sdcard/sdcard.c **** attr->atimensec = s->st_atime_nsec;
2364 .loc 1 391 0
2365 006e 1293 str r3, [sp, #72]
395:system/core/sdcard/sdcard.c **** attr->nlink = s->st_nlink;
2366 .loc 1 395 0
2367 0070 219B ldr r3, [sp, #132]
393:system/core/sdcard/sdcard.c **** attr->ctimensec = s->st_ctime_nsec;
ARM GAS /tmp/cc3I8rcL.s page 84
2368 .loc 1 393 0
2369 0072 1490 str r0, [sp, #80]
398:system/core/sdcard/sdcard.c **** attr->gid = node->gid;
2370 .loc 1 398 0
2371 0074 D8F82400 ldr r0, [r8, #36]
397:system/core/sdcard/sdcard.c **** attr->uid = node->uid;
2372 .loc 1 397 0
2373 0078 1791 str r1, [sp, #92]
395:system/core/sdcard/sdcard.c **** attr->nlink = s->st_nlink;
2374 .loc 1 395 0
2375 007a 1693 str r3, [sp, #88]
2376 .LBE355:
402:system/core/sdcard/sdcard.c **** int owner_mode = s->st_mode & 0700;
2377 .loc 1 402 0
2378 007c 02F4E073 and r3, r2, #448
2379 .LVL250:
2380 .LBB356:
404:system/core/sdcard/sdcard.c **** attr->mode = (attr->mode & S_IFMT) | filtered_mode;
2381 .loc 1 404 0
2382 0080 02F47042 and r2, r2, #61440
403:system/core/sdcard/sdcard.c **** int filtered_mode = node->mode & (owner_mode | (owner_mode >> 3) | (owner_mode >> 6));
2383 .loc 1 403 0
2384 0084 9911 asrs r1, r3, #6
398:system/core/sdcard/sdcard.c **** attr->gid = node->gid;
2385 .loc 1 398 0
2386 0086 1890 str r0, [sp, #96]
403:system/core/sdcard/sdcard.c **** int filtered_mode = node->mode & (owner_mode | (owner_mode >> 3) | (owner_mode >> 6));
2387 .loc 1 403 0
2388 0088 41EAD300 orr r0, r1, r3, lsr #3
2389 008c 40EA030C orr ip, r0, r3
2390 0090 B8F82830 ldrh r3, [r8, #40]
2391 .LVL251:
2392 .LBE356:
2393 .LBE354:
807:system/core/sdcard/sdcard.c **** fuse_reply(fuse, unique, &out, sizeof(out));
2394 .loc 1 807 0
2395 0094 0097 str r7, [sp, #0]
2396 0096 0196 str r6, [sp, #4]
2397 .LBB360:
2398 .LBB357:
403:system/core/sdcard/sdcard.c **** int filtered_mode = node->mode & (owner_mode | (owner_mode >> 3) | (owner_mode >> 6));
2399 .loc 1 403 0
2400 0098 0CEA0301 and r1, ip, r3
2401 .LBE357:
2402 .LBE360:
806:system/core/sdcard/sdcard.c **** out.attr_valid = 10;
2403 .loc 1 806 0
2404 009c 0023 movs r3, #0
2405 .LBB361:
2406 .LBB358:
404:system/core/sdcard/sdcard.c **** attr->mode = (attr->mode & S_IFMT) | filtered_mode;
2407 .loc 1 404 0
2408 009e 41EA0200 orr r0, r1, r2
2409 .LBE358:
2410 .LBE361:
806:system/core/sdcard/sdcard.c **** out.attr_valid = 10;
2411 .loc 1 806 0
ARM GAS /tmp/cc3I8rcL.s page 85
2412 00a2 0A22 movs r2, #10
2413 .LBB362:
2414 .LBB359:
404:system/core/sdcard/sdcard.c **** attr->mode = (attr->mode & S_IFMT) | filtered_mode;
2415 .loc 1 404 0
2416 00a4 1590 str r0, [sp, #84]
2417 .LBE359:
2418 .LBE362:
807:system/core/sdcard/sdcard.c **** fuse_reply(fuse, unique, &out, sizeof(out));
2419 .loc 1 807 0
2420 00a6 4846 mov r0, r9
806:system/core/sdcard/sdcard.c **** out.attr_valid = 10;
2421 .loc 1 806 0
2422 00a8 CDE90223 strd r2, [sp, #8]
807:system/core/sdcard/sdcard.c **** fuse_reply(fuse, unique, &out, sizeof(out));
2423 .loc 1 807 0
2424 00ac 2246 mov r2, r4
2425 00ae 2B46 mov r3, r5
2426 00b0 FFF7FEFF bl fuse_reply(PLT)
2427 .LVL252:
808:system/core/sdcard/sdcard.c **** return NO_STATUS;
2428 .loc 1 808 0
2429 00b4 0120 movs r0, #1
2430 .LVL253:
2431 .L159:
809:system/core/sdcard/sdcard.c **** }
2432 .loc 1 809 0
2433 00b6 37B0 add sp, sp, #220
2434 00b8 BDE8F083 pop {r4, r5, r6, r7, r8, r9, pc}
2435 .cfi_endproc
2436 .LFE88:
2437 .fnend
2439 .section .text.handle_getattr.isra.5,"ax",%progbits
2440 .align 1
2441 .thumb
2442 .thumb_func
2444 handle_getattr.isra.5:
2445 .fnstart
2446 .LFB126:
856:system/core/sdcard/sdcard.c **** static int handle_getattr(struct fuse* fuse, struct fuse_handler* handler,
2447 .loc 1 856 0
2448 .cfi_startproc
2449 @ args = 0, pretend = 0, frame = 4104
2450 @ frame_needed = 0, uses_anonymous_args = 0
2451 .LVL254:
2452 0000 234B ldr r3, .L165
2453 0002 244A ldr r2, .L165+4
2454 0004 2DE9F041 push {r4, r5, r6, r7, r8, lr}
2455 .save {r4, r5, r6, r7, r8, lr}
2456 .LCFI34:
2457 .cfi_def_cfa_offset 24
2458 .cfi_offset 4, -24
2459 .cfi_offset 5, -20
2460 .cfi_offset 6, -16
2461 .cfi_offset 7, -12
2462 .cfi_offset 8, -8
2463 .cfi_offset 14, -4
ARM GAS /tmp/cc3I8rcL.s page 86
2464 .pad #4096
2465 0008 ADF5805D sub sp, sp, #4096
2466 .LCFI35:
2467 .cfi_def_cfa_offset 4120
2468 .pad #16
2469 000c 84B0 sub sp, sp, #16
2470 .LCFI36:
2471 .cfi_def_cfa_offset 4136
856:system/core/sdcard/sdcard.c **** static int handle_getattr(struct fuse* fuse, struct fuse_handler* handler,
2472 .loc 1 856 0
2473 000e 0F46 mov r7, r1
2474 .LPIC19:
2475 0010 7B44 add r3, pc
2476 0012 0DF58051 add r1, sp, #4096
2477 .LVL255:
2478 0016 53F80280 ldr r8, [r3, r2]
2479 001a 0C31 adds r1, r1, #12
863:system/core/sdcard/sdcard.c **** node = lookup_node_and_path_by_id_locked(fuse, hdr->nodeid, path, sizeof(path));
2480 .loc 1 863 0
2481 001c 03AC add r4, sp, #12
856:system/core/sdcard/sdcard.c **** static int handle_getattr(struct fuse* fuse, struct fuse_handler* handler,
2482 .loc 1 856 0
2483 001e 0546 mov r5, r0
2484 0020 D8F80030 ldr r3, [r8, #0]
2485 0024 0B60 str r3, [r1, #0]
2486 .LVL256:
862:system/core/sdcard/sdcard.c **** pthread_mutex_lock(&fuse->lock);
2487 .loc 1 862 0
2488 0026 FFF7FEFF bl pthread_mutex_lock(PLT)
2489 .LVL257:
863:system/core/sdcard/sdcard.c **** node = lookup_node_and_path_by_id_locked(fuse, hdr->nodeid, path, sizeof(path));
2490 .loc 1 863 0
2491 002a D7E90423 ldrd r2, [r7, #16]
2492 002e 2846 mov r0, r5
2493 0030 0094 str r4, [sp, #0]
2494 0032 FFF7FEFF bl lookup_node_and_path_by_id_locked.constprop.28(PLT)
2495 .LVL258:
2496 0036 0646 mov r6, r0
2497 .LVL259:
866:system/core/sdcard/sdcard.c **** pthread_mutex_unlock(&fuse->lock);
2498 .loc 1 866 0
2499 0038 2846 mov r0, r5
2500 .LVL260:
2501 003a FFF7FEFF bl pthread_mutex_unlock(PLT)
2502 .LVL261:
868:system/core/sdcard/sdcard.c **** if (!node) {
2503 .loc 1 868 0
2504 003e 96B1 cbz r6, .L163
2505 .LVL262:
2506 .LBB365:
2507 .LBB366:
559:system/core/sdcard/sdcard.c **** return check_caller_access_to_name(fuse, hdr, node->parent, node->name, mode, has_rw);
2508 .loc 1 559 0
2509 0040 0420 movs r0, #4
2510 0042 0023 movs r3, #0
2511 0044 3946 mov r1, r7
2512 0046 8DE80900 stmia sp, {r0, r3}
ARM GAS /tmp/cc3I8rcL.s page 87
2513 004a 2846 mov r0, r5
2514 004c 726B ldr r2, [r6, #52]
2515 004e F36B ldr r3, [r6, #60]
2516 0050 FFF7FEFF bl check_caller_access_to_name(PLT)
2517 .LVL263:
2518 .LBE366:
2519 .LBE365:
871:system/core/sdcard/sdcard.c **** if (!check_caller_access_to_node(fuse, hdr, node, R_OK, false)) {
2520 .loc 1 871 0
2521 0054 50B1 cbz r0, .L164
875:system/core/sdcard/sdcard.c **** return fuse_reply_attr(fuse, hdr->unique, node, path);
2522 .loc 1 875 0
2523 0056 D7E90223 ldrd r2, [r7, #8]
2524 005a 2846 mov r0, r5
2525 005c 0096 str r6, [sp, #0]
2526 005e 0194 str r4, [sp, #4]
2527 0060 FFF7FEFF bl fuse_reply_attr(PLT)
2528 .LVL264:
2529 0064 04E0 b .L161
2530 .LVL265:
2531 .L163:
869:system/core/sdcard/sdcard.c **** return -ENOENT;
2532 .loc 1 869 0
2533 0066 6FF00100 mvn r0, #1
2534 006a 01E0 b .L161
2535 .LVL266:
2536 .L164:
872:system/core/sdcard/sdcard.c **** return -EACCES;
2537 .loc 1 872 0
2538 006c 6FF00C00 mvn r0, #12
2539 .LVL267:
2540 .L161:
876:system/core/sdcard/sdcard.c **** }
2541 .loc 1 876 0
2542 0070 0DF58052 add r2, sp, #4096
2543 0074 0C32 adds r2, r2, #12
2544 0076 1168 ldr r1, [r2, #0]
2545 0078 D8F80030 ldr r3, [r8, #0]
2546 007c 9942 cmp r1, r3
2547 007e 01D0 beq .L162
2548 0080 FFF7FEFF bl __stack_chk_fail(PLT)
2549 .LVL268:
2550 .L162:
2551 0084 04B0 add sp, sp, #16
2552 0086 0DF5805D add sp, sp, #4096
2553 008a BDE8F081 pop {r4, r5, r6, r7, r8, pc}
2554 .L166:
2555 008e 00BF .align 2
2556 .L165:
2557 0090 7C000000 .word _GLOBAL_OFFSET_TABLE_-(.LPIC19+4)
2558 0094 00000000 .word __stack_chk_guard(GOT)
2559 .cfi_endproc
2560 .LFE126:
2561 .fnend
2563 .section .text.handle_setattr.isra.13,"ax",%progbits
2564 .align 1
2565 .thumb
ARM GAS /tmp/cc3I8rcL.s page 88
2566 .thumb_func
2568 handle_setattr.isra.13:
2569 .fnstart
2570 .LFB134:
878:system/core/sdcard/sdcard.c **** static int handle_setattr(struct fuse* fuse, struct fuse_handler* handler,
2571 .loc 1 878 0
2572 .cfi_startproc
2573 @ args = 0, pretend = 0, frame = 4120
2574 @ frame_needed = 0, uses_anonymous_args = 0
2575 .LVL269:
2576 0000 404B ldr r3, .L193+4
2577 0002 2DE9F047 push {r4, r5, r6, r7, r8, r9, sl, lr}
2578 .save {r4, r5, r6, r7, r8, r9, sl, lr}
2579 .LCFI37:
2580 .cfi_def_cfa_offset 32
2581 .cfi_offset 4, -32
2582 .cfi_offset 5, -28
2583 .cfi_offset 6, -24
2584 .cfi_offset 7, -20
2585 .cfi_offset 8, -16
2586 .cfi_offset 9, -12
2587 .cfi_offset 10, -8
2588 .cfi_offset 14, -4
2589 0006 1446 mov r4, r2
2590 0008 3F4A ldr r2, .L193+8
2591 .LVL270:
2592 .pad #4128
2593 000a ADF5815D sub sp, sp, #4128
2594 .LCFI38:
2595 .cfi_def_cfa_offset 4160
878:system/core/sdcard/sdcard.c **** static int handle_setattr(struct fuse* fuse, struct fuse_handler* handler,
2596 .loc 1 878 0
2597 000e 8846 mov r8, r1
2598 0010 0DF58051 add r1, sp, #4096
2599 .LVL271:
2600 0014 0646 mov r6, r0
2601 .LPIC20:
2602 0016 7B44 add r3, pc
2603 0018 1C31 adds r1, r1, #28
888:system/core/sdcard/sdcard.c **** node = lookup_node_and_path_by_id_locked(fuse, hdr->nodeid, path, sizeof(path));
2604 .loc 1 888 0
2605 001a 07AD add r5, sp, #28
878:system/core/sdcard/sdcard.c **** static int handle_setattr(struct fuse* fuse, struct fuse_handler* handler,
2606 .loc 1 878 0
2607 001c 53F80290 ldr r9, [r3, r2]
2608 0020 D9F80030 ldr r3, [r9, #0]
2609 0024 0B60 str r3, [r1, #0]
2610 .LVL272:
886:system/core/sdcard/sdcard.c **** pthread_mutex_lock(&fuse->lock);
2611 .loc 1 886 0
2612 0026 FFF7FEFF bl pthread_mutex_lock(PLT)
2613 .LVL273:
887:system/core/sdcard/sdcard.c **** has_rw = get_caller_has_rw_locked(fuse, hdr);
2614 .loc 1 887 0
2615 002a 4146 mov r1, r8
2616 002c 3046 mov r0, r6
2617 002e FFF7FEFF bl get_caller_has_rw_locked(PLT)
ARM GAS /tmp/cc3I8rcL.s page 89
2618 .LVL274:
2619 0032 8246 mov sl, r0
2620 .LVL275:
888:system/core/sdcard/sdcard.c **** node = lookup_node_and_path_by_id_locked(fuse, hdr->nodeid, path, sizeof(path));
2621 .loc 1 888 0
2622 0034 D8E90423 ldrd r2, [r8, #16]
2623 0038 0095 str r5, [sp, #0]
2624 003a 3046 mov r0, r6
2625 .LVL276:
2626 003c FFF7FEFF bl lookup_node_and_path_by_id_locked.constprop.28(PLT)
2627 .LVL277:
2628 0040 0746 mov r7, r0
2629 .LVL278:
891:system/core/sdcard/sdcard.c **** pthread_mutex_unlock(&fuse->lock);
2630 .loc 1 891 0
2631 0042 3046 mov r0, r6
2632 .LVL279:
2633 0044 FFF7FEFF bl pthread_mutex_unlock(PLT)
2634 .LVL280:
893:system/core/sdcard/sdcard.c **** if (!node) {
2635 .loc 1 893 0
2636 0048 002F cmp r7, #0
2637 004a 45D0 beq .L176
2638 .LVL281:
2639 .LBB369:
2640 .LBB370:
559:system/core/sdcard/sdcard.c **** return check_caller_access_to_name(fuse, hdr, node->parent, node->name, mode, has_rw);
2641 .loc 1 559 0
2642 004c 0223 movs r3, #2
2643 004e 3046 mov r0, r6
2644 0050 4146 mov r1, r8
2645 0052 8DE80804 stmia sp, {r3, sl}
2646 0056 7A6B ldr r2, [r7, #52]
2647 0058 FB6B ldr r3, [r7, #60]
2648 005a FFF7FEFF bl check_caller_access_to_name(PLT)
2649 .LVL282:
2650 .LBE370:
2651 .LBE369:
896:system/core/sdcard/sdcard.c **** if (!check_caller_access_to_node(fuse, hdr, node, W_OK, has_rw)) {
2652 .loc 1 896 0
2653 005e 0028 cmp r0, #0
2654 0060 3DD0 beq .L177
903:system/core/sdcard/sdcard.c **** if ((req->valid & FATTR_SIZE) && truncate(path, req->size) < 0) {
2655 .loc 1 903 0
2656 0062 2068 ldr r0, [r4, #0]
2657 0064 0307 lsls r3, r0, #28
2658 0066 06D5 bpl .L169
2659 0068 2846 mov r0, r5
2660 006a 2169 ldr r1, [r4, #16]
2661 006c FFF7FEFF bl truncate(PLT)
2662 .LVL283:
2663 0070 0028 cmp r0, #0
2664 0072 00DA bge .L169
2665 0074 23E0 b .L192
2666 .L169:
913:system/core/sdcard/sdcard.c **** if (req->valid & (FATTR_ATIME | FATTR_MTIME)) {
2667 .loc 1 913 0
ARM GAS /tmp/cc3I8rcL.s page 90
2668 0076 2368 ldr r3, [r4, #0]
2669 0078 13F0300F tst r3, #48
2670 007c 24D0 beq .L170
914:system/core/sdcard/sdcard.c **** times[0].tv_nsec = UTIME_OMIT;
2671 .loc 1 914 0
2672 007e 204A ldr r2, .L193
916:system/core/sdcard/sdcard.c **** if (req->valid & FATTR_ATIME) {
2673 .loc 1 916 0
2674 0080 D806 lsls r0, r3, #27
914:system/core/sdcard/sdcard.c **** times[0].tv_nsec = UTIME_OMIT;
2675 .loc 1 914 0
2676 0082 0492 str r2, [sp, #16]
915:system/core/sdcard/sdcard.c **** times[1].tv_nsec = UTIME_OMIT;
2677 .loc 1 915 0
2678 0084 0692 str r2, [sp, #24]
916:system/core/sdcard/sdcard.c **** if (req->valid & FATTR_ATIME) {
2679 .loc 1 916 0
2680 0086 07D5 bpl .L171
917:system/core/sdcard/sdcard.c **** if (req->valid & FATTR_ATIME_NOW) {
2681 .loc 1 917 0
2682 0088 1906 lsls r1, r3, #24
920:system/core/sdcard/sdcard.c **** times[0].tv_sec = req->atime;
2683 .loc 1 920 0
2684 008a 57BF itett pl
2685 008c 226A ldrpl r2, [r4, #32]
918:system/core/sdcard/sdcard.c **** times[0].tv_nsec = UTIME_NOW;
2686 .loc 1 918 0
2687 008e 6FF04042 mvnmi r2, #-1073741824
920:system/core/sdcard/sdcard.c **** times[0].tv_sec = req->atime;
2688 .loc 1 920 0
2689 0092 0392 strpl r2, [sp, #12]
921:system/core/sdcard/sdcard.c **** times[0].tv_nsec = req->atimensec;
2690 .loc 1 921 0
2691 0094 A26B ldrpl r2, [r4, #56]
2692 0096 0492 str r2, [sp, #16]
2693 .L171:
924:system/core/sdcard/sdcard.c **** if (req->valid & FATTR_MTIME) {
2694 .loc 1 924 0
2695 0098 9A06 lsls r2, r3, #26
2696 009a 07D5 bpl .L173
925:system/core/sdcard/sdcard.c **** if (req->valid & FATTR_MTIME_NOW) {
2697 .loc 1 925 0
2698 009c D905 lsls r1, r3, #23
928:system/core/sdcard/sdcard.c **** times[1].tv_sec = req->mtime;
2699 .loc 1 928 0
2700 009e 57BF itett pl
2701 00a0 A16A ldrpl r1, [r4, #40]
926:system/core/sdcard/sdcard.c **** times[1].tv_nsec = UTIME_NOW;
2702 .loc 1 926 0
2703 00a2 6FF04041 mvnmi r1, #-1073741824
928:system/core/sdcard/sdcard.c **** times[1].tv_sec = req->mtime;
2704 .loc 1 928 0
2705 00a6 0591 strpl r1, [sp, #20]
929:system/core/sdcard/sdcard.c **** times[1].tv_nsec = req->mtimensec;
2706 .loc 1 929 0
2707 00a8 E16B ldrpl r1, [r4, #60]
2708 00aa 0691 str r1, [sp, #24]
ARM GAS /tmp/cc3I8rcL.s page 91
2709 .L173:
934:system/core/sdcard/sdcard.c **** if (utimensat(-1, path, times, 0) < 0) {
2710 .loc 1 934 0
2711 00ac 0023 movs r3, #0
2712 00ae 4FF0FF30 mov r0, #-1
2713 00b2 2946 mov r1, r5
2714 00b4 03AA add r2, sp, #12
2715 00b6 FFF7FEFF bl utimensat(PLT)
2716 .LVL284:
2717 00ba 0028 cmp r0, #0
2718 00bc 04DA bge .L170
2719 .L192:
935:system/core/sdcard/sdcard.c **** return -errno;
2720 .loc 1 935 0
2721 00be FFF7FEFF bl __errno(PLT)
2722 .LVL285:
2723 00c2 0068 ldr r0, [r0, #0]
2724 00c4 4042 negs r0, r0
2725 00c6 0CE0 b .L168
2726 .L170:
938:system/core/sdcard/sdcard.c **** return fuse_reply_attr(fuse, hdr->unique, node, path);
2727 .loc 1 938 0
2728 00c8 D8E90223 ldrd r2, [r8, #8]
2729 00cc 0097 str r7, [sp, #0]
2730 00ce 3046 mov r0, r6
2731 00d0 0195 str r5, [sp, #4]
2732 00d2 FFF7FEFF bl fuse_reply_attr(PLT)
2733 .LVL286:
2734 00d6 04E0 b .L168
2735 .LVL287:
2736 .L176:
894:system/core/sdcard/sdcard.c **** return -ENOENT;
2737 .loc 1 894 0
2738 00d8 6FF00100 mvn r0, #1
2739 00dc 01E0 b .L168
2740 .LVL288:
2741 .L177:
897:system/core/sdcard/sdcard.c **** return -EACCES;
2742 .loc 1 897 0
2743 00de 6FF00C00 mvn r0, #12
2744 .LVL289:
2745 .L168:
939:system/core/sdcard/sdcard.c **** }
2746 .loc 1 939 0
2747 00e2 0DF58053 add r3, sp, #4096
2748 00e6 1C33 adds r3, r3, #28
2749 00e8 1A68 ldr r2, [r3, #0]
2750 00ea D9F80010 ldr r1, [r9, #0]
2751 00ee 8A42 cmp r2, r1
2752 00f0 01D0 beq .L175
2753 00f2 FFF7FEFF bl __stack_chk_fail(PLT)
2754 .LVL290:
2755 .L175:
2756 00f6 08B0 add sp, sp, #32
2757 00f8 0DF5805D add sp, sp, #4096
2758 00fc BDE8F087 pop {r4, r5, r6, r7, r8, r9, sl, pc}
2759 .L194:
ARM GAS /tmp/cc3I8rcL.s page 92
2760 .align 2
2761 .L193:
2762 0100 FEFFFF3F .word 1073741822
2763 0104 EA000000 .word _GLOBAL_OFFSET_TABLE_-(.LPIC20+4)
2764 0108 00000000 .word __stack_chk_guard(GOT)
2765 .cfi_endproc
2766 .LFE134:
2767 .fnend
2769 .section .text.handle_rename.isra.17,"ax",%progbits
2770 .align 1
2771 .thumb
2772 .thumb_func
2774 handle_rename.isra.17:
2775 .fnstart
2776 .LFB138:
1080:system/core/sdcard/sdcard.c **** static int handle_rename(struct fuse* fuse, struct fuse_handler* handler,
2777 .loc 1 1080 0
2778 .cfi_startproc
2779 @ args = 4, pretend = 0, frame = 16400
2780 @ frame_needed = 0, uses_anonymous_args = 0
2781 .LVL291:
2782 0000 2DE9F04F push {r4, r5, r6, r7, r8, r9, sl, fp, lr}
2783 .save {r4, r5, r6, r7, r8, r9, sl, fp, lr}
2784 .LCFI39:
2785 .cfi_def_cfa_offset 36
2786 .cfi_offset 4, -36
2787 .cfi_offset 5, -32
2788 .cfi_offset 6, -28
2789 .cfi_offset 7, -24
2790 .cfi_offset 8, -20
2791 .cfi_offset 9, -16
2792 .cfi_offset 10, -12
2793 .cfi_offset 11, -8
2794 .cfi_offset 14, -4
2795 0004 9946 mov r9, r3
2796 0006 8D4B ldr r3, .L243
2797 .LVL292:
2798 0008 1546 mov r5, r2
2799 .pad #16384
2800 000a ADF5804D sub sp, sp, #16384
2801 .LCFI40:
2802 .cfi_def_cfa_offset 16420
2803 000e 8C4A ldr r2, .L243+4
2804 .LVL293:
2805 .pad #28
2806 0010 87B0 sub sp, sp, #28
2807 .LCFI41:
2808 .cfi_def_cfa_offset 16448
1080:system/core/sdcard/sdcard.c **** static int handle_rename(struct fuse* fuse, struct fuse_handler* handler,
2809 .loc 1 1080 0
2810 0012 8846 mov r8, r1
2811 0014 0DF58041 add r1, sp, #16384
2812 .LVL294:
2813 0018 0446 mov r4, r0
2814 001a 4031 adds r1, r1, #64
1100:system/core/sdcard/sdcard.c **** new_parent_path, sizeof(new_parent_path));
2815 .loc 1 1100 0
ARM GAS /tmp/cc3I8rcL.s page 93
2816 001c 0DF5805A add sl, sp, #4096
1080:system/core/sdcard/sdcard.c **** static int handle_rename(struct fuse* fuse, struct fuse_handler* handler,
2817 .loc 1 1080 0
2818 .LPIC21:
2819 0020 7B44 add r3, pc
2820 0022 0E68 ldr r6, [r1, #0]
2821 0024 0DF58041 add r1, sp, #16384
2822 0028 9B58 ldr r3, [r3, r2]
2823 002a 1431 adds r1, r1, #20
1100:system/core/sdcard/sdcard.c **** new_parent_path, sizeof(new_parent_path));
2824 .loc 1 1100 0
2825 002c 0AF1140A add sl, sl, #20
1080:system/core/sdcard/sdcard.c **** static int handle_rename(struct fuse* fuse, struct fuse_handler* handler,
2826 .loc 1 1080 0
2827 0030 1F68 ldr r7, [r3, #0]
2828 0032 0393 str r3, [sp, #12]
2829 0034 0F60 str r7, [r1, #0]
2830 .LVL295:
1095:system/core/sdcard/sdcard.c **** pthread_mutex_lock(&fuse->lock);
2831 .loc 1 1095 0
2832 0036 FFF7FEFF bl pthread_mutex_lock(PLT)
2833 .LVL296:
1096:system/core/sdcard/sdcard.c **** has_rw = get_caller_has_rw_locked(fuse, hdr);
2834 .loc 1 1096 0
2835 003a 4146 mov r1, r8
2836 003c 2046 mov r0, r4
2837 003e FFF7FEFF bl get_caller_has_rw_locked(PLT)
2838 .LVL297:
2839 0042 8346 mov fp, r0
2840 .LVL298:
1098:system/core/sdcard/sdcard.c **** old_parent_path, sizeof(old_parent_path));
2841 .loc 1 1098 0
2842 0044 05A8 add r0, sp, #20
2843 .LVL299:
1097:system/core/sdcard/sdcard.c **** old_parent_node = lookup_node_and_path_by_id_locked(fuse, hdr->nodeid,
2844 .loc 1 1097 0
2845 0046 D8E90423 ldrd r2, [r8, #16]
2846 004a 0090 str r0, [sp, #0]
2847 004c 2046 mov r0, r4
2848 004e FFF7FEFF bl lookup_node_and_path_by_id_locked.constprop.28(PLT)
2849 .LVL300:
2850 0052 0746 mov r7, r0
2851 .LVL301:
1099:system/core/sdcard/sdcard.c **** new_parent_node = lookup_node_and_path_by_id_locked(fuse, req->newdir,
2852 .loc 1 1099 0
2853 0054 CDF800A0 str sl, [sp, #0]
2854 0058 2046 mov r0, r4
2855 .LVL302:
2856 005a D5E90023 ldrd r2, [r5]
2857 005e FFF7FEFF bl lookup_node_and_path_by_id_locked.constprop.28(PLT)
2858 .LVL303:
2859 0062 0546 mov r5, r0
2860 .LVL304:
1105:system/core/sdcard/sdcard.c **** if (!old_parent_node || !new_parent_node) {
2861 .loc 1 1105 0
2862 0064 17B9 cbnz r7, .L196
2863 .LVL305:
ARM GAS /tmp/cc3I8rcL.s page 94
2864 .L198:
2865 .LBB389:
2866 .LBB390:
2867 .LBB391:
2868 .LBB392:
1106:system/core/sdcard/sdcard.c **** res = -ENOENT;
2869 .loc 1 1106 0
2870 0066 6FF00105 mvn r5, #1
2871 .LVL306:
2872 006a C3E0 b .L197
2873 .LVL307:
2874 .L196:
2875 .LBE392:
2876 .LBE391:
2877 .LBE390:
2878 .LBE389:
1105:system/core/sdcard/sdcard.c **** if (!old_parent_node || !new_parent_node) {
2879 .loc 1 1105 0
2880 006c 0028 cmp r0, #0
2881 006e FAD0 beq .L198
1109:system/core/sdcard/sdcard.c **** if (!check_caller_access_to_name(fuse, hdr, old_parent_node, old_name, W_OK, has_rw)) {
2882 .loc 1 1109 0
2883 0070 4FF0020C mov ip, #2
2884 0074 CDF804B0 str fp, [sp, #4]
2885 0078 2046 mov r0, r4
2886 .LVL308:
2887 007a 4146 mov r1, r8
2888 007c 3A46 mov r2, r7
2889 007e CDF800C0 str ip, [sp, #0]
2890 0082 4B46 mov r3, r9
2891 0084 CDF808C0 str ip, [sp, #8]
2892 0088 FFF7FEFF bl check_caller_access_to_name(PLT)
2893 .LVL309:
2894 008c DDF808C0 ldr ip, [sp, #8]
2895 0090 0028 cmp r0, #0
2896 0092 00F0AD80 beq .L217
1113:system/core/sdcard/sdcard.c **** if (!check_caller_access_to_name(fuse, hdr, new_parent_node, new_name, W_OK, has_rw)) {
2897 .loc 1 1113 0
2898 0096 CDF800C0 str ip, [sp, #0]
2899 009a 2046 mov r0, r4
2900 009c 4146 mov r1, r8
2901 009e CDF804B0 str fp, [sp, #4]
2902 00a2 2A46 mov r2, r5
2903 00a4 3346 mov r3, r6
2904 00a6 FFF7FEFF bl check_caller_access_to_name(PLT)
2905 .LVL310:
2906 00aa 0028 cmp r0, #0
2907 00ac 00F0A080 beq .L217
2908 .LVL311:
2909 .LBB398:
2910 .LBB399:
659:system/core/sdcard/sdcard.c **** for (node = node->child; node; node = node->next) {
2911 .loc 1 659 0
2912 00b0 D7F83080 ldr r8, [r7, #48]
2913 .LVL312:
2914 00b4 09E0 b .L199
2915 .L201:
ARM GAS /tmp/cc3I8rcL.s page 95
664:system/core/sdcard/sdcard.c **** if (!strcmp(name, node->name)) {
2916 .loc 1 664 0
2917 00b6 4846 mov r0, r9
2918 00b8 D8F83C10 ldr r1, [r8, #60]
2919 00bc FFF7FEFF bl strcmp(PLT)
2920 .LVL313:
2921 00c0 0028 cmp r0, #0
2922 00c2 00F0A480 beq .L200
659:system/core/sdcard/sdcard.c **** for (node = node->child; node; node = node->next) {
2923 .loc 1 659 0
2924 00c6 D8F82C80 ldr r8, [r8, #44]
2925 .LVL314:
2926 .L199:
2927 00ca B8F1000F cmp r8, #0
2928 00ce F2D1 bne .L201
2929 00d0 C9E7 b .L198
2930 .L242:
2931 .LBE399:
2932 .LBE398:
2933 .LBB400:
2934 .LBB401:
251:system/core/sdcard/sdcard.c **** node->refcount++;
2935 .loc 1 251 0
2936 00d2 D8F80020 ldr r2, [r8, #0]
2937 .LBE401:
2938 .LBE400:
1124:system/core/sdcard/sdcard.c **** pthread_mutex_unlock(&fuse->lock);
2939 .loc 1 1124 0
2940 00d6 2046 mov r0, r4
2941 .LBB403:
2942 .LBB402:
251:system/core/sdcard/sdcard.c **** node->refcount++;
2943 .loc 1 251 0
2944 00d8 531C adds r3, r2, #1
2945 00da C8F80030 str r3, [r8, #0]
2946 .LBE402:
2947 .LBE403:
1124:system/core/sdcard/sdcard.c **** pthread_mutex_unlock(&fuse->lock);
2948 .loc 1 1124 0
2949 00de FFF7FEFF bl pthread_mutex_unlock(PLT)
2950 .LVL315:
1131:system/core/sdcard/sdcard.c **** || strcasecmp(old_name, new_name);
2951 .loc 1 1131 0
2952 00e2 AF42 cmp r7, r5
2953 00e4 07D1 bne .L218
2954 00e6 4846 mov r0, r9
2955 00e8 3146 mov r1, r6
2956 00ea FFF7FEFF bl strcasecmp(PLT)
2957 .LVL316:
2958 00ee 031C adds r3, r0, #0
2959 00f0 18BF it ne
2960 00f2 0123 movne r3, #1
2961 00f4 00E0 b .L202
2962 .L218:
2963 00f6 0123 movs r3, #1
2964 .L202:
2965 .LVL317:
ARM GAS /tmp/cc3I8rcL.s page 96
1132:system/core/sdcard/sdcard.c **** if (!(new_actual_name = find_file_within(new_parent_path, new_name,
2966 .loc 1 1132 0
2967 00f8 0DF54052 add r2, sp, #12288
2968 00fc 5046 mov r0, sl
2969 00fe 3146 mov r1, r6
2970 0100 1432 adds r2, r2, #20
2971 0102 FFF7FEFF bl find_file_within.constprop.27(PLT)
2972 .LVL318:
2973 0106 8146 mov r9, r0
2974 .LVL319:
2975 0108 0028 cmp r0, #0
2976 010a 68D0 beq .L219
1139:system/core/sdcard/sdcard.c **** res = rename(old_child_path, new_child_path);
2977 .loc 1 1139 0
2978 010c 0DF50050 add r0, sp, #8192
2979 .LVL320:
2980 0110 0DF54051 add r1, sp, #12288
2981 0114 1430 adds r0, r0, #20
2982 0116 1431 adds r1, r1, #20
2983 0118 FFF7FEFF bl rename(PLT)
2984 .LVL321:
1140:system/core/sdcard/sdcard.c **** if (res < 0) {
2985 .loc 1 1140 0
2986 011c 0028 cmp r0, #0
2987 011e 04DA bge .L204
1141:system/core/sdcard/sdcard.c **** res = -errno;
2988 .loc 1 1141 0
2989 0120 FFF7FEFF bl __errno(PLT)
2990 .LVL322:
2991 0124 0568 ldr r5, [r0, #0]
2992 .LVL323:
2993 0126 6D42 negs r5, r5
2994 .LVL324:
2995 0128 5BE0 b .L203
2996 .LVL325:
2997 .L204:
1145:system/core/sdcard/sdcard.c **** pthread_mutex_lock(&fuse->lock);
2998 .loc 1 1145 0
2999 012a 2046 mov r0, r4
3000 .LVL326:
3001 012c FFF7FEFF bl pthread_mutex_lock(PLT)
3002 .LVL327:
3003 .LBB404:
3004 .LBB405:
3005 .LBB406:
3006 .LBB407:
3007 .loc 2 217 0
3008 0130 3046 mov r0, r6
3009 0132 FFF7FEFF bl strlen(PLT)
3010 .LVL328:
3011 0136 0746 mov r7, r0
3012 .LVL329:
3013 .LBE407:
3014 .LBE406:
601:system/core/sdcard/sdcard.c **** int need_actual_name = strcmp(name, actual_name);
3015 .loc 1 601 0
3016 0138 4946 mov r1, r9
ARM GAS /tmp/cc3I8rcL.s page 97
3017 013a 3046 mov r0, r6
3018 013c FFF7FEFF bl strcmp(PLT)
3019 .LVL330:
605:system/core/sdcard/sdcard.c **** if (namelen > node->namelen) {
3020 .loc 1 605 0
3021 0140 D8F83810 ldr r1, [r8, #56]
601:system/core/sdcard/sdcard.c **** int need_actual_name = strcmp(name, actual_name);
3022 .loc 1 601 0
3023 0144 8246 mov sl, r0
3024 .LVL331:
605:system/core/sdcard/sdcard.c **** if (namelen > node->namelen) {
3025 .loc 1 605 0
3026 0146 8F42 cmp r7, r1
3027 0148 18D9 bls .L205
3028 .LBB408:
606:system/core/sdcard/sdcard.c **** char* new_name = realloc(node->name, namelen + 1);
3029 .loc 1 606 0
3030 014a 07F1010B add fp, r7, #1
3031 .LVL332:
3032 014e D8F83C00 ldr r0, [r8, #60]
3033 .LVL333:
3034 0152 5946 mov r1, fp
3035 0154 FFF7FEFF bl realloc(PLT)
3036 .LVL334:
607:system/core/sdcard/sdcard.c **** if (!new_name) {
3037 .loc 1 607 0
3038 0158 0028 cmp r0, #0
3039 015a 64D0 beq .L206
610:system/core/sdcard/sdcard.c **** node->name = new_name;
3040 .loc 1 610 0
3041 015c C8F83C00 str r0, [r8, #60]
611:system/core/sdcard/sdcard.c **** if (need_actual_name && node->actual_name) {
3042 .loc 1 611 0
3043 0160 BAF1000F cmp sl, #0
3044 0164 1DD0 beq .L207
3045 0166 D8F84000 ldr r0, [r8, #64]
3046 .LVL335:
3047 016a 40B1 cbz r0, .L213
3048 .LBB409:
612:system/core/sdcard/sdcard.c **** char* new_actual_name = realloc(node->actual_name, namelen + 1);
3049 .loc 1 612 0
3050 016c 5946 mov r1, fp
3051 016e FFF7FEFF bl realloc(PLT)
3052 .LVL336:
613:system/core/sdcard/sdcard.c **** if (!new_actual_name) {
3053 .loc 1 613 0
3054 0172 0028 cmp r0, #0
3055 0174 57D0 beq .L206
616:system/core/sdcard/sdcard.c **** node->actual_name = new_actual_name;
3056 .loc 1 616 0
3057 0176 C8F84000 str r0, [r8, #64]
3058 017a 00E0 b .L213
3059 .LVL337:
3060 .L205:
3061 .LBE409:
3062 .LBE408:
621:system/core/sdcard/sdcard.c **** if (need_actual_name) {
ARM GAS /tmp/cc3I8rcL.s page 98
3063 .loc 1 621 0
3064 017c 88B1 cbz r0, .L207
3065 .LVL338:
3066 .L213:
622:system/core/sdcard/sdcard.c **** if (!node->actual_name) {
3067 .loc 1 622 0
3068 017e D8F84020 ldr r2, [r8, #64]
3069 0182 32B1 cbz r2, .L209
3070 .L211:
3071 .LVL339:
3072 .LBB410:
3073 .LBB411:
108:bionic/libc/include/string.h **** return __builtin___memcpy_chk(dest, src, copy_amount, d_len);
3074 .loc 2 108 0
3075 0184 D8F84000 ldr r0, [r8, #64]
3076 0188 4946 mov r1, r9
3077 018a 7A1C adds r2, r7, #1
3078 .LVL340:
3079 018c FFF7FEFF bl memcpy(PLT)
3080 .LVL341:
3081 0190 0EE0 b .L210
3082 .LVL342:
3083 .L209:
3084 .LBE411:
3085 .LBE410:
623:system/core/sdcard/sdcard.c **** node->actual_name = malloc(namelen + 1);
3086 .loc 1 623 0
3087 0192 781C adds r0, r7, #1
3088 0194 FFF7FEFF bl malloc(PLT)
3089 .LVL343:
3090 0198 C8F84000 str r0, [r8, #64]
624:system/core/sdcard/sdcard.c **** if (!node->actual_name) {
3091 .loc 1 624 0
3092 019c 0028 cmp r0, #0
3093 019e F1D1 bne .L211
3094 01a0 41E0 b .L206
3095 .L207:
630:system/core/sdcard/sdcard.c **** free(node->actual_name);
3096 .loc 1 630 0
3097 01a2 D8F84000 ldr r0, [r8, #64]
3098 01a6 FFF7FEFF bl free(PLT)
3099 .LVL344:
631:system/core/sdcard/sdcard.c **** node->actual_name = NULL;
3100 .loc 1 631 0
3101 01aa 0020 movs r0, #0
3102 01ac C8F84000 str r0, [r8, #64]
3103 .L210:
3104 .LVL345:
3105 .LBB412:
3106 .LBB413:
108:bionic/libc/include/string.h **** return __builtin___memcpy_chk(dest, src, copy_amount, d_len);
3107 .loc 2 108 0
3108 01b0 3146 mov r1, r6
3109 01b2 7A1C adds r2, r7, #1
3110 .LVL346:
3111 01b4 D8F83C00 ldr r0, [r8, #60]
3112 01b8 FFF7FEFF bl memcpy(PLT)
ARM GAS /tmp/cc3I8rcL.s page 99
3113 .LVL347:
3114 .LBE413:
3115 .LBE412:
3116 .LBE405:
3117 .LBE404:
1148:system/core/sdcard/sdcard.c **** remove_node_from_parent_locked(child_node);
3118 .loc 1 1148 0
3119 01bc 4046 mov r0, r8
3120 .LBB415:
3121 .LBB414:
634:system/core/sdcard/sdcard.c **** node->namelen = namelen;
3122 .loc 1 634 0
3123 01be C8F83870 str r7, [r8, #56]
3124 .LBE414:
3125 .LBE415:
1148:system/core/sdcard/sdcard.c **** remove_node_from_parent_locked(child_node);
3126 .loc 1 1148 0
3127 01c2 FFF7FEFF bl remove_node_from_parent_locked(PLT)
3128 .LVL348:
3129 .LBB416:
3130 .LBB397:
279:system/core/sdcard/sdcard.c **** node->parent = parent;
3131 .loc 1 279 0
3132 01c6 C8F83450 str r5, [r8, #52]
280:system/core/sdcard/sdcard.c **** node->next = parent->child;
3133 .loc 1 280 0
3134 01ca 2B6B ldr r3, [r5, #48]
3135 01cc C8F82C30 str r3, [r8, #44]
3136 .LBB395:
3137 .LBB393:
251:system/core/sdcard/sdcard.c **** node->refcount++;
3138 .loc 1 251 0
3139 01d0 2968 ldr r1, [r5, #0]
3140 .LBE393:
3141 .LBE395:
281:system/core/sdcard/sdcard.c **** parent->child = node;
3142 .loc 1 281 0
3143 01d2 C5F83080 str r8, [r5, #48]
3144 .LVL349:
3145 .LBB396:
3146 .LBB394:
251:system/core/sdcard/sdcard.c **** node->refcount++;
3147 .loc 1 251 0
3148 01d6 481C adds r0, r1, #1
3149 01d8 2860 str r0, [r5, #0]
3150 01da 0025 movs r5, #0
3151 .LVL350:
3152 01dc 04E0 b .L212
3153 .LVL351:
3154 .L219:
3155 .LBE394:
3156 .LBE396:
3157 .LBE397:
3158 .LBE416:
1134:system/core/sdcard/sdcard.c **** res = -ENOENT;
3159 .loc 1 1134 0
3160 01de 6FF00105 mvn r5, #1
ARM GAS /tmp/cc3I8rcL.s page 100
3161 .LVL352:
3162 .L203:
1154:system/core/sdcard/sdcard.c **** pthread_mutex_lock(&fuse->lock);
3163 .loc 1 1154 0
3164 01e2 2046 mov r0, r4
3165 01e4 FFF7FEFF bl pthread_mutex_lock(PLT)
3166 .LVL353:
3167 .L212:
1156:system/core/sdcard/sdcard.c **** release_node_locked(child_node);
3168 .loc 1 1156 0
3169 01e8 4046 mov r0, r8
3170 01ea FFF7FEFF bl release_node_locked(PLT)
3171 .LVL354:
3172 01ee 01E0 b .L197
3173 .LVL355:
3174 .L217:
1110:system/core/sdcard/sdcard.c **** res = -EACCES;
3175 .loc 1 1110 0
3176 01f0 6FF00C05 mvn r5, #12
3177 .LVL356:
3178 .L197:
1158:system/core/sdcard/sdcard.c **** pthread_mutex_unlock(&fuse->lock);
3179 .loc 1 1158 0
3180 01f4 2046 mov r0, r4
3181 01f6 FFF7FEFF bl pthread_mutex_unlock(PLT)
3182 .LVL357:
1160:system/core/sdcard/sdcard.c **** }
3183 .loc 1 1160 0
3184 01fa 039B ldr r3, [sp, #12]
3185 01fc 0DF58042 add r2, sp, #16384
3186 0200 2846 mov r0, r5
3187 0202 1432 adds r2, r2, #20
3188 0204 1268 ldr r2, [r2, #0]
3189 0206 1968 ldr r1, [r3, #0]
3190 0208 8A42 cmp r2, r1
3191 020a 11D0 beq .L215
3192 020c 0EE0 b .L241
3193 .LVL358:
3194 .L200:
1118:system/core/sdcard/sdcard.c **** if (!child_node || get_node_path_locked(child_node,
3195 .loc 1 1118 0
3196 020e 0DF50051 add r1, sp, #8192
3197 0212 4046 mov r0, r8
3198 0214 1431 adds r1, r1, #20
3199 0216 4FF48052 mov r2, #4096
3200 021a FFF7FEFF bl get_node_path_locked(PLT)
3201 .LVL359:
3202 021e 0028 cmp r0, #0
3203 0220 BFF657AF bge .L242
3204 0224 1FE7 b .L198
3205 .LVL360:
3206 .L206:
1134:system/core/sdcard/sdcard.c **** res = -ENOENT;
3207 .loc 1 1134 0
3208 0226 6FF00B05 mvn r5, #11
3209 .LVL361:
3210 022a DDE7 b .L212
ARM GAS /tmp/cc3I8rcL.s page 101
3211 .LVL362:
3212 .L241:
1160:system/core/sdcard/sdcard.c **** }
3213 .loc 1 1160 0
3214 022c FFF7FEFF bl __stack_chk_fail(PLT)
3215 .LVL363:
3216 .L215:
3217 0230 07B0 add sp, sp, #28
3218 0232 0DF5804D add sp, sp, #16384
3219 0236 BDE8F08F pop {r4, r5, r6, r7, r8, r9, sl, fp, pc}
3220 .L244:
3221 023a 00BF .align 2
3222 .L243:
3223 023c 18020000 .word _GLOBAL_OFFSET_TABLE_-(.LPIC21+4)
3224 0240 00000000 .word __stack_chk_guard(GOT)
3225 .cfi_endproc
3226 .LFE138:
3227 .fnend
3229 .section .text.create_node_locked,"ax",%progbits
3230 .align 1
3231 .global create_node_locked
3232 .thumb
3233 .thumb_func
3235 create_node_locked:
3236 .fnstart
3237 .LFB78:
564:system/core/sdcard/sdcard.c **** {
3238 .loc 1 564 0
3239 .cfi_startproc
3240 @ args = 0, pretend = 0, frame = 0
3241 @ frame_needed = 0, uses_anonymous_args = 0
3242 .LVL364:
3243 0000 2DE9F84F push {r3, r4, r5, r6, r7, r8, r9, sl, fp, lr}
3244 .save {r3, r4, r5, r6, r7, r8, r9, sl, fp, lr}
3245 .LCFI42:
3246 .cfi_def_cfa_offset 40
3247 .cfi_offset 3, -40
3248 .cfi_offset 4, -36
3249 .cfi_offset 5, -32
3250 .cfi_offset 6, -28
3251 .cfi_offset 7, -24
3252 .cfi_offset 8, -20
3253 .cfi_offset 9, -16
3254 .cfi_offset 10, -12
3255 .cfi_offset 11, -8
3256 .cfi_offset 14, -4
564:system/core/sdcard/sdcard.c **** {
3257 .loc 1 564 0
3258 0004 0746 mov r7, r0
3259 .LBB435:
3260 .LBB436:
3261 .loc 2 217 0
3262 0006 1046 mov r0, r2
3263 .LVL365:
3264 .LBE436:
3265 .LBE435:
564:system/core/sdcard/sdcard.c **** {
ARM GAS /tmp/cc3I8rcL.s page 102
3266 .loc 1 564 0
3267 0008 0D46 mov r5, r1
3268 000a 9146 mov r9, r2
3269 000c 9B46 mov fp, r3
3270 .LBB438:
3271 .LBB437:
3272 .loc 2 217 0
3273 000e FFF7FEFF bl strlen(PLT)
3274 .LVL366:
3275 0012 8246 mov sl, r0
3276 .LBE437:
3277 .LBE438:
568:system/core/sdcard/sdcard.c **** node = calloc(1, sizeof(struct node));
3278 .loc 1 568 0
3279 0014 5021 movs r1, #80
3280 0016 0120 movs r0, #1
3281 0018 FFF7FEFF bl calloc(PLT)
3282 .LVL367:
569:system/core/sdcard/sdcard.c **** if (!node) {
3283 .loc 1 569 0
3284 001c 0446 mov r4, r0
3285 001e 0028 cmp r0, #0
3286 0020 00F0F180 beq .L246
572:system/core/sdcard/sdcard.c **** node->name = malloc(namelen + 1);
3287 .loc 1 572 0
3288 0024 0AF10106 add r6, sl, #1
3289 0028 3046 mov r0, r6
3290 .LVL368:
3291 002a FFF7FEFF bl malloc(PLT)
3292 .LVL369:
3293 002e 8046 mov r8, r0
3294 0030 E063 str r0, [r4, #60]
573:system/core/sdcard/sdcard.c **** if (!node->name) {
3295 .loc 1 573 0
3296 0032 20B9 cbnz r0, .L247
574:system/core/sdcard/sdcard.c **** free(node);
3297 .loc 1 574 0
3298 0034 2046 mov r0, r4
575:system/core/sdcard/sdcard.c **** return NULL;
3299 .loc 1 575 0
3300 0036 4446 mov r4, r8
3301 .LVL370:
574:system/core/sdcard/sdcard.c **** free(node);
3302 .loc 1 574 0
3303 0038 FFF7FEFF bl free(PLT)
3304 .LVL371:
575:system/core/sdcard/sdcard.c **** return NULL;
3305 .loc 1 575 0
3306 003c E3E0 b .L246
3307 .LVL372:
3308 .L247:
3309 .LBB439:
3310 .LBB440:
108:bionic/libc/include/string.h **** return __builtin___memcpy_chk(dest, src, copy_amount, d_len);
3311 .loc 2 108 0
3312 003e 4946 mov r1, r9
3313 0040 3246 mov r2, r6
ARM GAS /tmp/cc3I8rcL.s page 103
3314 0042 FFF7FEFF bl memcpy(PLT)
3315 .LVL373:
3316 .LBE440:
3317 .LBE439:
578:system/core/sdcard/sdcard.c **** if (strcmp(name, actual_name)) {
3318 .loc 1 578 0
3319 0046 4846 mov r0, r9
3320 0048 5946 mov r1, fp
3321 004a FFF7FEFF bl strcmp(PLT)
3322 .LVL374:
3323 004e 88B1 cbz r0, .L248
579:system/core/sdcard/sdcard.c **** node->actual_name = malloc(namelen + 1);
3324 .loc 1 579 0
3325 0050 3046 mov r0, r6
3326 0052 FFF7FEFF bl malloc(PLT)
3327 .LVL375:
3328 0056 8146 mov r9, r0
3329 .LVL376:
3330 0058 2064 str r0, [r4, #64]
580:system/core/sdcard/sdcard.c **** if (!node->actual_name) {
3331 .loc 1 580 0
3332 005a 38B9 cbnz r0, .L249
581:system/core/sdcard/sdcard.c **** free(node->name);
3333 .loc 1 581 0
3334 005c 4046 mov r0, r8
3335 005e FFF7FEFF bl free(PLT)
3336 .LVL377:
582:system/core/sdcard/sdcard.c **** free(node);
3337 .loc 1 582 0
3338 0062 2046 mov r0, r4
583:system/core/sdcard/sdcard.c **** return NULL;
3339 .loc 1 583 0
3340 0064 4C46 mov r4, r9
3341 .LVL378:
582:system/core/sdcard/sdcard.c **** free(node);
3342 .loc 1 582 0
3343 0066 FFF7FEFF bl free(PLT)
3344 .LVL379:
583:system/core/sdcard/sdcard.c **** return NULL;
3345 .loc 1 583 0
3346 006a CCE0 b .L246
3347 .LVL380:
3348 .L249:
3349 .LBB441:
3350 .LBB442:
108:bionic/libc/include/string.h **** return __builtin___memcpy_chk(dest, src, copy_amount, d_len);
3351 .loc 2 108 0
3352 006c 5946 mov r1, fp
3353 006e 3246 mov r2, r6
3354 0070 FFF7FEFF bl memcpy(PLT)
3355 .LVL381:
3356 .L248:
3357 .LBE442:
3358 .LBE441:
3359 .LBB443:
3360 .LBB444:
246:system/core/sdcard/sdcard.c **** return (__u64) (uintptr_t) ptr;
ARM GAS /tmp/cc3I8rcL.s page 104
3361 .loc 1 246 0
3362 0074 0023 movs r3, #0
3363 .LBE444:
3364 .LBE443:
587:system/core/sdcard/sdcard.c **** node->namelen = namelen;
3365 .loc 1 587 0
3366 0076 C4F838A0 str sl, [r4, #56]
3367 .LVL382:
589:system/core/sdcard/sdcard.c **** node->gen = fuse->next_generation++;
3368 .loc 1 589 0
3369 007a DFED651B fldd d17, .L300 @ int
3370 .LBB446:
3371 .LBB445:
246:system/core/sdcard/sdcard.c **** return (__u64) (uintptr_t) ptr;
3372 .loc 1 246 0
3373 007e A460 str r4, [r4, #8]
3374 0080 E360 str r3, [r4, #12]
3375 .LBE445:
3376 .LBE446:
589:system/core/sdcard/sdcard.c **** node->gen = fuse->next_generation++;
3377 .loc 1 589 0
3378 0082 D7ED020B fldd d16, [r7, #8] @ int
3379 0086 C4ED040B fstd d16, [r4, #16] @ int
3380 008a 30EFA108 vadd.i64 d0, d16, d17
3381 008e 87ED020B fstd d0, [r7, #8] @ int
3382 .LVL383:
3383 .LBB447:
3384 .LBB448:
426:system/core/sdcard/sdcard.c **** node->perm = PERM_INHERIT;
3385 .loc 1 426 0
3386 0092 A361 str r3, [r4, #24]
427:system/core/sdcard/sdcard.c **** node->userid = parent->userid;
3387 .loc 1 427 0
3388 0094 E869 ldr r0, [r5, #28]
3389 0096 E061 str r0, [r4, #28]
428:system/core/sdcard/sdcard.c **** node->uid = parent->uid;
3390 .loc 1 428 0
3391 0098 296A ldr r1, [r5, #32]
3392 009a 2162 str r1, [r4, #32]
429:system/core/sdcard/sdcard.c **** node->gid = parent->gid;
3393 .loc 1 429 0
3394 009c 6A6A ldr r2, [r5, #36]
3395 009e 6262 str r2, [r4, #36]
430:system/core/sdcard/sdcard.c **** node->mode = parent->mode;
3396 .loc 1 430 0
3397 00a0 B5F828C0 ldrh ip, [r5, #40]
3398 00a4 A4F828C0 strh ip, [r4, #40] @ movhi
432:system/core/sdcard/sdcard.c **** if (fuse->derive == DERIVE_NONE) {
3399 .loc 1 432 0
3400 00a8 7B69 ldr r3, [r7, #20]
3401 00aa 002B cmp r3, #0
3402 00ac 00F0A180 beq .L251
437:system/core/sdcard/sdcard.c **** switch (parent->perm) {
3403 .loc 1 437 0
3404 00b0 A869 ldr r0, [r5, #24]
3405 00b2 421E subs r2, r0, #1
3406 00b4 052A cmp r2, #5
ARM GAS /tmp/cc3I8rcL.s page 105
3407 00b6 00F29C80 bhi .L251
3408 00ba DFE802F0 tbb [pc, r2]
3409 .L257:
3410 00be 03 .byte (.L252-.L257)/2
3411 00bf 0C .byte (.L253-.L257)/2
3412 00c0 53 .byte (.L254-.L257)/2
3413 00c1 7D .byte (.L255-.L257)/2
3414 00c2 7D .byte (.L255-.L257)/2
3415 00c3 8C .byte (.L256-.L257)/2
3416 .align 1
3417 .L252:
443:system/core/sdcard/sdcard.c **** node->perm = PERM_ROOT;
3418 .loc 1 443 0
3419 00c4 0222 movs r2, #2
444:system/core/sdcard/sdcard.c **** node->userid = strtoul(node->name, NULL, 10);
3420 .loc 1 444 0
3421 00c6 E06B ldr r0, [r4, #60]
3422 00c8 0021 movs r1, #0
443:system/core/sdcard/sdcard.c **** node->perm = PERM_ROOT;
3423 .loc 1 443 0
3424 00ca A261 str r2, [r4, #24]
444:system/core/sdcard/sdcard.c **** node->userid = strtoul(node->name, NULL, 10);
3425 .loc 1 444 0
3426 00cc 0A22 movs r2, #10
3427 00ce FFF7FEFF bl strtoul(PLT)
3428 .LVL384:
3429 00d2 E061 str r0, [r4, #28]
3430 00d4 8DE0 b .L251
3431 .L253:
448:system/core/sdcard/sdcard.c **** node->mode = 0770;
3432 .loc 1 448 0
3433 00d6 4FF4FC76 mov r6, #504
3434 .LVL385:
449:system/core/sdcard/sdcard.c **** if (!strcasecmp(node->name, "Android")) {
3435 .loc 1 449 0
3436 00da 4F49 ldr r1, .L300+8
448:system/core/sdcard/sdcard.c **** node->mode = 0770;
3437 .loc 1 448 0
3438 00dc 2685 strh r6, [r4, #40] @ movhi
449:system/core/sdcard/sdcard.c **** if (!strcasecmp(node->name, "Android")) {
3439 .loc 1 449 0
3440 00de E66B ldr r6, [r4, #60]
3441 .LPIC22:
3442 00e0 7944 add r1, pc
3443 00e2 3046 mov r0, r6
3444 00e4 FFF7FEFF bl strcasecmp(PLT)
3445 .LVL386:
3446 00e8 08B9 cbnz r0, .L258
451:system/core/sdcard/sdcard.c **** node->perm = PERM_ANDROID;
3447 .loc 1 451 0
3448 00ea 0321 movs r1, #3
3449 00ec 42E0 b .L299
3450 .L258:
453:system/core/sdcard/sdcard.c **** } else if (fuse->split_perms) {
3451 .loc 1 453 0
3452 00ee 3B7E ldrb r3, [r7, #24] @ zero_extendqisi2
3453 00f0 002B cmp r3, #0
ARM GAS /tmp/cc3I8rcL.s page 106
3454 00f2 7ED0 beq .L251
454:system/core/sdcard/sdcard.c **** if (!strcasecmp(node->name, "DCIM")
3455 .loc 1 454 0
3456 00f4 4949 ldr r1, .L300+12
3457 00f6 3046 mov r0, r6
3458 .LPIC23:
3459 00f8 7944 add r1, pc
3460 00fa FFF7FEFF bl strcasecmp(PLT)
3461 .LVL387:
3462 00fe 28B1 cbz r0, .L260
455:system/core/sdcard/sdcard.c **** || !strcasecmp(node->name, "Pictures")) {
3463 .loc 1 455 0
3464 0100 4749 ldr r1, .L300+16
3465 0102 3046 mov r0, r6
3466 .LPIC24:
3467 0104 7944 add r1, pc
3468 0106 FFF7FEFF bl strcasecmp(PLT)
3469 .LVL388:
3470 010a 10B9 cbnz r0, .L261
3471 .L260:
456:system/core/sdcard/sdcard.c **** node->gid = AID_SDCARD_PICS;
3472 .loc 1 456 0
3473 010c 40F20940 movw r0, #1033
3474 0110 26E0 b .L298
3475 .L261:
457:system/core/sdcard/sdcard.c **** } else if (!strcasecmp(node->name, "Alarms")
3476 .loc 1 457 0
3477 0112 4449 ldr r1, .L300+20
3478 0114 3046 mov r0, r6
3479 .LPIC25:
3480 0116 7944 add r1, pc
3481 0118 FFF7FEFF bl strcasecmp(PLT)
3482 .LVL389:
3483 011c F0B1 cbz r0, .L262
458:system/core/sdcard/sdcard.c **** || !strcasecmp(node->name, "Movies")
3484 .loc 1 458 0
3485 011e 4249 ldr r1, .L300+24
3486 0120 3046 mov r0, r6
3487 .LPIC26:
3488 0122 7944 add r1, pc
3489 0124 FFF7FEFF bl strcasecmp(PLT)
3490 .LVL390:
3491 0128 C0B1 cbz r0, .L262
459:system/core/sdcard/sdcard.c **** || !strcasecmp(node->name, "Music")
3492 .loc 1 459 0
3493 012a 4049 ldr r1, .L300+28
3494 012c 3046 mov r0, r6
3495 .LPIC27:
3496 012e 7944 add r1, pc
3497 0130 FFF7FEFF bl strcasecmp(PLT)
3498 .LVL391:
3499 0134 90B1 cbz r0, .L262
460:system/core/sdcard/sdcard.c **** || !strcasecmp(node->name, "Notifications")
3500 .loc 1 460 0
3501 0136 3E49 ldr r1, .L300+32
3502 0138 3046 mov r0, r6
3503 .LPIC28:
ARM GAS /tmp/cc3I8rcL.s page 107
3504 013a 7944 add r1, pc
3505 013c FFF7FEFF bl strcasecmp(PLT)
3506 .LVL392:
3507 0140 60B1 cbz r0, .L262
461:system/core/sdcard/sdcard.c **** || !strcasecmp(node->name, "Podcasts")
3508 .loc 1 461 0
3509 0142 3C49 ldr r1, .L300+36
3510 0144 3046 mov r0, r6
3511 .LPIC29:
3512 0146 7944 add r1, pc
3513 0148 FFF7FEFF bl strcasecmp(PLT)
3514 .LVL393:
3515 014c 30B1 cbz r0, .L262
462:system/core/sdcard/sdcard.c **** || !strcasecmp(node->name, "Ringtones")) {
3516 .loc 1 462 0
3517 014e 3A49 ldr r1, .L300+40
3518 0150 3046 mov r0, r6
3519 .LPIC30:
3520 0152 7944 add r1, pc
3521 0154 FFF7FEFF bl strcasecmp(PLT)
3522 .LVL394:
3523 0158 0028 cmp r0, #0
3524 015a 4AD1 bne .L251
3525 .L262:
463:system/core/sdcard/sdcard.c **** node->gid = AID_SDCARD_AV;
3526 .loc 1 463 0
3527 015c 40F20A40 movw r0, #1034
3528 .L298:
3529 0160 6062 str r0, [r4, #36]
3530 0162 46E0 b .L251
3531 .LVL395:
3532 .L254:
468:system/core/sdcard/sdcard.c **** if (!strcasecmp(node->name, "data")) {
3533 .loc 1 468 0
3534 0164 E66B ldr r6, [r4, #60]
3535 .LVL396:
3536 0166 3549 ldr r1, .L300+44
3537 0168 3046 mov r0, r6
3538 .LPIC31:
3539 016a 7944 add r1, pc
3540 016c FFF7FEFF bl strcasecmp(PLT)
3541 .LVL397:
3542 0170 10B9 cbnz r0, .L263
470:system/core/sdcard/sdcard.c **** node->perm = PERM_ANDROID_DATA;
3543 .loc 1 470 0
3544 0172 0421 movs r1, #4
3545 .L299:
3546 0174 A161 str r1, [r4, #24]
3547 0176 39E0 b .L297
3548 .L263:
472:system/core/sdcard/sdcard.c **** } else if (!strcasecmp(node->name, "obb")) {
3549 .loc 1 472 0
3550 0178 3149 ldr r1, .L300+48
3551 017a 3046 mov r0, r6
3552 .LPIC32:
3553 017c 7944 add r1, pc
3554 017e FFF7FEFF bl strcasecmp(PLT)
ARM GAS /tmp/cc3I8rcL.s page 108
3555 .LVL398:
3556 0182 68B9 cbnz r0, .L264
474:system/core/sdcard/sdcard.c **** node->perm = PERM_ANDROID_OBB;
3557 .loc 1 474 0
3558 0184 0520 movs r0, #5
3559 .LBB449:
3560 .LBB450:
218:bionic/libc/include/string.h **** }
219:bionic/libc/include/string.h ****
220:bionic/libc/include/string.h **** size_t slen = __builtin_strlen(s);
221:bionic/libc/include/string.h **** if (__builtin_constant_p(slen)) {
222:bionic/libc/include/string.h **** return slen;
223:bionic/libc/include/string.h **** }
224:bionic/libc/include/string.h **** #endif /* !defined(__clang__) */
225:bionic/libc/include/string.h ****
226:bionic/libc/include/string.h **** return __strlen_chk(s, bos);
3561 .loc 2 226 0
3562 0186 4FF48051 mov r1, #4096
3563 .LBE450:
3564 .LBE449:
475:system/core/sdcard/sdcard.c **** node->mode = 0771;
3565 .loc 1 475 0
3566 018a 00F5FA72 add r2, r0, #500
474:system/core/sdcard/sdcard.c **** node->perm = PERM_ANDROID_OBB;
3567 .loc 1 474 0
3568 018e A061 str r0, [r4, #24]
477:system/core/sdcard/sdcard.c **** node->graft_path = fuse->obbpath;
3569 .loc 1 477 0
3570 0190 07F17000 add r0, r7, #112
475:system/core/sdcard/sdcard.c **** node->mode = 0771;
3571 .loc 1 475 0
3572 0194 2285 strh r2, [r4, #40] @ movhi
477:system/core/sdcard/sdcard.c **** node->graft_path = fuse->obbpath;
3573 .loc 1 477 0
3574 0196 6064 str r0, [r4, #68]
3575 .LVL399:
3576 .LBB452:
3577 .LBB451:
3578 .loc 2 226 0
3579 0198 FFF7FEFF bl __strlen_chk(PLT)
3580 .LVL400:
3581 .LBE451:
3582 .LBE452:
478:system/core/sdcard/sdcard.c **** node->graft_pathlen = strlen(fuse->obbpath);
3583 .loc 1 478 0
3584 019c A064 str r0, [r4, #72]
3585 019e 28E0 b .L251
3586 .LVL401:
3587 .L264:
479:system/core/sdcard/sdcard.c **** } else if (!strcasecmp(node->name, "user")) {
3588 .loc 1 479 0
3589 01a0 2849 ldr r1, .L300+52
3590 01a2 3046 mov r0, r6
3591 .LPIC33:
3592 01a4 7944 add r1, pc
3593 01a6 FFF7FEFF bl strcasecmp(PLT)
3594 .LVL402:
ARM GAS /tmp/cc3I8rcL.s page 109
3595 01aa 10BB cbnz r0, .L251
483:system/core/sdcard/sdcard.c **** node->perm = PERM_ANDROID_USER;
3596 .loc 1 483 0
3597 01ac 0621 movs r1, #6
484:system/core/sdcard/sdcard.c **** node->gid = AID_SDCARD_ALL;
3598 .loc 1 484 0
3599 01ae 40F20B43 movw r3, #1035
483:system/core/sdcard/sdcard.c **** node->perm = PERM_ANDROID_USER;
3600 .loc 1 483 0
3601 01b2 A161 str r1, [r4, #24]
484:system/core/sdcard/sdcard.c **** node->gid = AID_SDCARD_ALL;
3602 .loc 1 484 0
3603 01b4 6362 str r3, [r4, #36]
3604 01b6 0BE0 b .L265
3605 .LVL403:
3606 .L255:
490:system/core/sdcard/sdcard.c **** appid = (appid_t) hashmapGet(fuse->package_to_appid, node->name);
3607 .loc 1 490 0
3608 01b8 07F58357 add r7, r7, #4192
3609 .LVL404:
3610 01bc E16B ldr r1, [r4, #60]
3611 01be 3869 ldr r0, [r7, #16]
3612 01c0 FFF7FEFF bl hashmapGet(PLT)
3613 .LVL405:
491:system/core/sdcard/sdcard.c **** if (appid != 0) {
3614 .loc 1 491 0
3615 01c4 0146 mov r1, r0
3616 01c6 18B1 cbz r0, .L265
492:system/core/sdcard/sdcard.c **** node->uid = multiuser_get_uid(parent->userid, appid);
3617 .loc 1 492 0
3618 01c8 E869 ldr r0, [r5, #28]
3619 .LVL406:
3620 01ca FFF7FEFF bl multiuser_get_uid(PLT)
3621 .LVL407:
3622 01ce 2062 str r0, [r4, #32]
3623 .LVL408:
3624 .L265:
494:system/core/sdcard/sdcard.c **** node->mode = 0770;
3625 .loc 1 494 0
3626 01d0 4FF4FC70 mov r0, #504
3627 01d4 0CE0 b .L296
3628 .LVL409:
3629 .L256:
498:system/core/sdcard/sdcard.c **** node->perm = PERM_ROOT;
3630 .loc 1 498 0
3631 01d6 0221 movs r1, #2
499:system/core/sdcard/sdcard.c **** node->userid = strtoul(node->name, NULL, 10);
3632 .loc 1 499 0
3633 01d8 E06B ldr r0, [r4, #60]
3634 01da 0A22 movs r2, #10
498:system/core/sdcard/sdcard.c **** node->perm = PERM_ROOT;
3635 .loc 1 498 0
3636 01dc A161 str r1, [r4, #24]
499:system/core/sdcard/sdcard.c **** node->userid = strtoul(node->name, NULL, 10);
3637 .loc 1 499 0
3638 01de 0021 movs r1, #0
3639 01e0 FFF7FEFF bl strtoul(PLT)
ARM GAS /tmp/cc3I8rcL.s page 110
3640 .LVL410:
500:system/core/sdcard/sdcard.c **** node->gid = AID_SDCARD_R;
3641 .loc 1 500 0
3642 01e4 40F20443 movw r3, #1028
499:system/core/sdcard/sdcard.c **** node->userid = strtoul(node->name, NULL, 10);
3643 .loc 1 499 0
3644 01e8 E061 str r0, [r4, #28]
500:system/core/sdcard/sdcard.c **** node->gid = AID_SDCARD_R;
3645 .loc 1 500 0
3646 01ea 6362 str r3, [r4, #36]
3647 .LVL411:
3648 .L297:
501:system/core/sdcard/sdcard.c **** node->mode = 0771;
3649 .loc 1 501 0
3650 01ec 40F2F910 movw r0, #505
3651 .LVL412:
3652 .L296:
3653 01f0 2085 strh r0, [r4, #40] @ movhi
3654 .L251:
3655 .LVL413:
3656 .LBE448:
3657 .LBE447:
3658 .LBB453:
3659 .LBB454:
251:system/core/sdcard/sdcard.c **** node->refcount++;
3660 .loc 1 251 0
3661 01f2 2268 ldr r2, [r4, #0]
3662 .LBE454:
3663 .LBE453:
3664 .LBB456:
3665 .LBB457:
279:system/core/sdcard/sdcard.c **** node->parent = parent;
3666 .loc 1 279 0
3667 01f4 6563 str r5, [r4, #52]
3668 .LBE457:
3669 .LBE456:
3670 .LBB463:
3671 .LBB455:
251:system/core/sdcard/sdcard.c **** node->refcount++;
3672 .loc 1 251 0
3673 01f6 511C adds r1, r2, #1
3674 01f8 2160 str r1, [r4, #0]
3675 .LVL414:
3676 .LBE455:
3677 .LBE463:
3678 .LBB464:
3679 .LBB462:
280:system/core/sdcard/sdcard.c **** node->next = parent->child;
3680 .loc 1 280 0
3681 01fa 2B6B ldr r3, [r5, #48]
3682 01fc E362 str r3, [r4, #44]
3683 .LBB458:
3684 .LBB459:
251:system/core/sdcard/sdcard.c **** node->refcount++;
3685 .loc 1 251 0
3686 01fe 2868 ldr r0, [r5, #0]
3687 .LBE459:
ARM GAS /tmp/cc3I8rcL.s page 111
3688 .LBE458:
281:system/core/sdcard/sdcard.c **** parent->child = node;
3689 .loc 1 281 0
3690 0200 2C63 str r4, [r5, #48]
3691 .LVL415:
3692 .LBB461:
3693 .LBB460:
251:system/core/sdcard/sdcard.c **** node->refcount++;
3694 .loc 1 251 0
3695 0202 421C adds r2, r0, #1
3696 0204 2A60 str r2, [r5, #0]
3697 .LVL416:
3698 .L246:
3699 .LBE460:
3700 .LBE461:
3701 .LBE462:
3702 .LBE464:
595:system/core/sdcard/sdcard.c **** }
3703 .loc 1 595 0
3704 0206 2046 mov r0, r4
3705 0208 BDE8F88F pop {r3, r4, r5, r6, r7, r8, r9, sl, fp, pc}
3706 .L301:
3707 020c AFF30080 .align 3
3708 .L300:
3709 0210 01000000 .word 1
3710 0214 00000000 .word 0
3711 0218 34010000 .word .LC8-(.LPIC22+4)
3712 021c 20010000 .word .LC9-(.LPIC23+4)
3713 0220 18010000 .word .LC10-(.LPIC24+4)
3714 0224 0A010000 .word .LC11-(.LPIC25+4)
3715 0228 02010000 .word .LC12-(.LPIC26+4)
3716 022c FA000000 .word .LC13-(.LPIC27+4)
3717 0230 F2000000 .word .LC14-(.LPIC28+4)
3718 0234 EA000000 .word .LC15-(.LPIC29+4)
3719 0238 E2000000 .word .LC16-(.LPIC30+4)
3720 023c CE000000 .word .LC17-(.LPIC31+4)
3721 0240 C0000000 .word .LC18-(.LPIC32+4)
3722 0244 9C000000 .word .LC19-(.LPIC33+4)
3723 .cfi_endproc
3724 .LFE78:
3725 .fnend
3727 .section .text.fuse_reply_entry,"ax",%progbits
3728 .align 1
3729 .thumb
3730 .thumb_func
3732 fuse_reply_entry:
3733 .fnstart
3734 .LFB87:
769:system/core/sdcard/sdcard.c **** {
3735 .loc 1 769 0
3736 .cfi_startproc
3737 @ args = 16, pretend = 0, frame = 232
3738 @ frame_needed = 0, uses_anonymous_args = 0
3739 .LVL417:
3740 0000 2DE9F045 push {r4, r5, r6, r7, r8, sl, lr}
3741 .save {r4, r5, r6, r7, r8, sl, lr}
3742 .LCFI43:
ARM GAS /tmp/cc3I8rcL.s page 112
3743 .cfi_def_cfa_offset 28
3744 .cfi_offset 4, -28
3745 .cfi_offset 5, -24
3746 .cfi_offset 6, -20
3747 .cfi_offset 7, -16
3748 .cfi_offset 8, -12
3749 .cfi_offset 10, -8
3750 .cfi_offset 14, -4
3751 0004 2DED028B fstmfdd sp!, {d8}
3752 .vsave {d8}
3753 .LCFI44:
3754 .cfi_def_cfa_offset 36
3755 .cfi_offset 80, -36
3756 0008 8046 mov r8, r0
3757 000a 43EC182B fmdrr d8, r2, r3 @ int
3758 .pad #244
3759 000e BDB0 sub sp, sp, #244
3760 .LCFI45:
3761 .cfi_def_cfa_offset 280
774:system/core/sdcard/sdcard.c **** if (lstat(path, &s) < 0) {
3762 .loc 1 774 0
3763 0010 4998 ldr r0, [sp, #292]
3764 .LVL418:
3765 0012 02A9 add r1, sp, #8
769:system/core/sdcard/sdcard.c **** {
3766 .loc 1 769 0
3767 0014 469D ldr r5, [sp, #280]
3768 0016 479C ldr r4, [sp, #284]
774:system/core/sdcard/sdcard.c **** if (lstat(path, &s) < 0) {
3769 .loc 1 774 0
3770 0018 FFF7FEFF bl lstat(PLT)
3771 .LVL419:
3772 001c 0028 cmp r0, #0
3773 001e 04DA bge .L303
775:system/core/sdcard/sdcard.c **** return -errno;
3774 .loc 1 775 0
3775 0020 FFF7FEFF bl __errno(PLT)
3776 .LVL420:
3777 0024 0168 ldr r1, [r0, #0]
3778 0026 4842 negs r0, r1
3779 0028 78E0 b .L311
3780 .L303:
778:system/core/sdcard/sdcard.c **** pthread_mutex_lock(&fuse->lock);
3781 .loc 1 778 0
3782 002a 4046 mov r0, r8
3783 002c FFF7FEFF bl pthread_mutex_lock(PLT)
3784 .LVL421:
3785 .LBB475:
3786 .LBB476:
3787 .LBB477:
3788 .LBB478:
659:system/core/sdcard/sdcard.c **** for (node = node->child; node; node = node->next) {
3789 .loc 1 659 0
3790 0030 2E6B ldr r6, [r5, #48]
3791 .LVL422:
3792 0032 06E0 b .L305
3793 .L307:
ARM GAS /tmp/cc3I8rcL.s page 113
664:system/core/sdcard/sdcard.c **** if (!strcmp(name, node->name)) {
3794 .loc 1 664 0
3795 0034 2046 mov r0, r4
3796 0036 F16B ldr r1, [r6, #60]
3797 0038 FFF7FEFF bl strcmp(PLT)
3798 .LVL423:
3799 003c 0028 cmp r0, #0
3800 003e 5FD0 beq .L306
659:system/core/sdcard/sdcard.c **** for (node = node->child; node; node = node->next) {
3801 .loc 1 659 0
3802 0040 F66A ldr r6, [r6, #44]
3803 .LVL424:
3804 .L305:
3805 0042 002E cmp r6, #0
3806 0044 F6D1 bne .L307
3807 0046 5FE0 b .L312
3808 .LVL425:
3809 .L310:
3810 .LBE478:
3811 .LBE477:
3812 .LBE476:
3813 .LBE475:
781:system/core/sdcard/sdcard.c **** pthread_mutex_unlock(&fuse->lock);
3814 .loc 1 781 0
3815 0048 4046 mov r0, r8
3816 .LVL426:
3817 004a FFF7FEFF bl pthread_mutex_unlock(PLT)
3818 .LVL427:
782:system/core/sdcard/sdcard.c **** return -ENOMEM;
3819 .loc 1 782 0
3820 004e 6FF00B00 mvn r0, #11
3821 0052 63E0 b .L311
3822 .LVL428:
3823 .L309:
3824 .LBB482:
3825 .LBB483:
784:system/core/sdcard/sdcard.c **** memset(&out, 0, sizeof(out));
3826 .loc 1 784 0
3827 0054 0DF1700A add sl, sp, #112
3828 .LVL429:
144:bionic/libc/include/string.h **** return __builtin___memset_chk(s, c, n, __builtin_object_size (s, 0));
3829 .loc 2 144 0
3830 0058 8027 movs r7, #128
3831 005a 0021 movs r1, #0
3832 005c 3A46 mov r2, r7
3833 005e 5046 mov r0, sl
3834 0060 FFF7FEFF bl memset(PLT)
3835 .LVL430:
3836 .LBE483:
3837 .LBE482:
3838 .LBB484:
3839 .LBB485:
385:system/core/sdcard/sdcard.c **** attr->ino = node->nid;
3840 .loc 1 385 0
3841 0064 D6E90223 ldrd r2, [r6, #8]
386:system/core/sdcard/sdcard.c **** attr->size = s->st_size;
3842 .loc 1 386 0
ARM GAS /tmp/cc3I8rcL.s page 114
3843 0068 DDE90E45 ldrd r4, [sp, #56]
3844 .LVL431:
387:system/core/sdcard/sdcard.c **** attr->blocks = s->st_blocks;
3845 .loc 1 387 0
3846 006c DDE91201 ldrd r0, [sp, #72]
385:system/core/sdcard/sdcard.c **** attr->ino = node->nid;
3847 .loc 1 385 0
3848 0070 CDE92623 strd r2, [sp, #152]
389:system/core/sdcard/sdcard.c **** attr->mtime = s->st_mtime;
3849 .loc 1 389 0
3850 0074 169B ldr r3, [sp, #88]
386:system/core/sdcard/sdcard.c **** attr->size = s->st_size;
3851 .loc 1 386 0
3852 0076 CDE92845 strd r4, [sp, #160]
388:system/core/sdcard/sdcard.c **** attr->atime = s->st_atime;
3853 .loc 1 388 0
3854 007a 149D ldr r5, [sp, #80]
3855 .LVL432:
387:system/core/sdcard/sdcard.c **** attr->blocks = s->st_blocks;
3856 .loc 1 387 0
3857 007c CDE92A01 strd r0, [sp, #168]
388:system/core/sdcard/sdcard.c **** attr->atime = s->st_atime;
3858 .loc 1 388 0
3859 0080 0021 movs r1, #0
390:system/core/sdcard/sdcard.c **** attr->ctime = s->st_ctime;
3860 .loc 1 390 0
3861 0082 189A ldr r2, [sp, #96]
391:system/core/sdcard/sdcard.c **** attr->atimensec = s->st_atime_nsec;
3862 .loc 1 391 0
3863 0084 159C ldr r4, [sp, #84]
388:system/core/sdcard/sdcard.c **** attr->atime = s->st_atime;
3864 .loc 1 388 0
3865 0086 2D91 str r1, [sp, #180]
392:system/core/sdcard/sdcard.c **** attr->mtimensec = s->st_mtime_nsec;
3866 .loc 1 392 0
3867 0088 1798 ldr r0, [sp, #92]
388:system/core/sdcard/sdcard.c **** attr->atime = s->st_atime;
3868 .loc 1 388 0
3869 008a 2C95 str r5, [sp, #176]
394:system/core/sdcard/sdcard.c **** attr->mode = s->st_mode;
3870 .loc 1 394 0
3871 008c 069D ldr r5, [sp, #24]
389:system/core/sdcard/sdcard.c **** attr->mtime = s->st_mtime;
3872 .loc 1 389 0
3873 008e 2E93 str r3, [sp, #184]
395:system/core/sdcard/sdcard.c **** attr->nlink = s->st_nlink;
3874 .loc 1 395 0
3875 0090 079B ldr r3, [sp, #28]
389:system/core/sdcard/sdcard.c **** attr->mtime = s->st_mtime;
3876 .loc 1 389 0
3877 0092 2F91 str r1, [sp, #188]
390:system/core/sdcard/sdcard.c **** attr->ctime = s->st_ctime;
3878 .loc 1 390 0
3879 0094 3191 str r1, [sp, #196]
393:system/core/sdcard/sdcard.c **** attr->ctimensec = s->st_ctime_nsec;
3880 .loc 1 393 0
3881 0096 1999 ldr r1, [sp, #100]
ARM GAS /tmp/cc3I8rcL.s page 115
394:system/core/sdcard/sdcard.c **** attr->mode = s->st_mode;
3882 .loc 1 394 0
3883 0098 3595 str r5, [sp, #212]
392:system/core/sdcard/sdcard.c **** attr->mtimensec = s->st_mtime_nsec;
3884 .loc 1 392 0
3885 009a 3390 str r0, [sp, #204]
3886 .LBE485:
402:system/core/sdcard/sdcard.c **** int owner_mode = s->st_mode & 0700;
3887 .loc 1 402 0
3888 009c 05F4E070 and r0, r5, #448
3889 .LVL433:
3890 .LBB486:
404:system/core/sdcard/sdcard.c **** attr->mode = (attr->mode & S_IFMT) | filtered_mode;
3891 .loc 1 404 0
3892 00a0 05F47045 and r5, r5, #61440
395:system/core/sdcard/sdcard.c **** attr->nlink = s->st_nlink;
3893 .loc 1 395 0
3894 00a4 3693 str r3, [sp, #216]
393:system/core/sdcard/sdcard.c **** attr->ctimensec = s->st_ctime_nsec;
3895 .loc 1 393 0
3896 00a6 3491 str r1, [sp, #208]
403:system/core/sdcard/sdcard.c **** int filtered_mode = node->mode & (owner_mode | (owner_mode >> 3) | (owner_mode >> 6));
3897 .loc 1 403 0
3898 00a8 8111 asrs r1, r0, #6
390:system/core/sdcard/sdcard.c **** attr->ctime = s->st_ctime;
3899 .loc 1 390 0
3900 00aa 3092 str r2, [sp, #192]
391:system/core/sdcard/sdcard.c **** attr->atimensec = s->st_atime_nsec;
3901 .loc 1 391 0
3902 00ac 3294 str r4, [sp, #200]
397:system/core/sdcard/sdcard.c **** attr->uid = node->uid;
3903 .loc 1 397 0
3904 00ae 326A ldr r2, [r6, #32]
403:system/core/sdcard/sdcard.c **** int filtered_mode = node->mode & (owner_mode | (owner_mode >> 3) | (owner_mode >> 6));
3905 .loc 1 403 0
3906 00b0 41EAD003 orr r3, r1, r0, lsr #3
3907 00b4 43EA000C orr ip, r3, r0
397:system/core/sdcard/sdcard.c **** attr->uid = node->uid;
3908 .loc 1 397 0
3909 00b8 3792 str r2, [sp, #220]
398:system/core/sdcard/sdcard.c **** attr->gid = node->gid;
3910 .loc 1 398 0
3911 00ba 746A ldr r4, [r6, #36]
3912 00bc 3894 str r4, [sp, #224]
403:system/core/sdcard/sdcard.c **** int filtered_mode = node->mode & (owner_mode | (owner_mode >> 3) | (owner_mode >> 6));
3913 .loc 1 403 0
3914 00be 328D ldrh r2, [r6, #40]
3915 00c0 0CEA0204 and r4, ip, r2
404:system/core/sdcard/sdcard.c **** attr->mode = (attr->mode & S_IFMT) | filtered_mode;
3916 .loc 1 404 0
3917 00c4 44EA0500 orr r0, r4, r5
3918 .LVL434:
3919 .LBE486:
3920 .LBE484:
786:system/core/sdcard/sdcard.c **** out.attr_valid = 10;
3921 .loc 1 786 0
3922 00c8 0A24 movs r4, #10
ARM GAS /tmp/cc3I8rcL.s page 116
3923 00ca 0025 movs r5, #0
3924 .LBB488:
3925 .LBB487:
404:system/core/sdcard/sdcard.c **** attr->mode = (attr->mode & S_IFMT) | filtered_mode;
3926 .loc 1 404 0
3927 00cc 3590 str r0, [sp, #212]
3928 .LBE487:
3929 .LBE488:
790:system/core/sdcard/sdcard.c **** pthread_mutex_unlock(&fuse->lock);
3930 .loc 1 790 0
3931 00ce 4046 mov r0, r8
786:system/core/sdcard/sdcard.c **** out.attr_valid = 10;
3932 .loc 1 786 0
3933 00d0 CDE92245 strd r4, [sp, #136]
787:system/core/sdcard/sdcard.c **** out.entry_valid = 10;
3934 .loc 1 787 0
3935 00d4 CDE92045 strd r4, [sp, #128]
788:system/core/sdcard/sdcard.c **** out.nodeid = node->nid;
3936 .loc 1 788 0
3937 00d8 D6E90223 ldrd r2, [r6, #8]
3938 00dc CDE91C23 strd r2, [sp, #112]
789:system/core/sdcard/sdcard.c **** out.generation = node->gen;
3939 .loc 1 789 0
3940 00e0 D6E90445 ldrd r4, [r6, #16]
3941 00e4 CDE91E45 strd r4, [sp, #120]
790:system/core/sdcard/sdcard.c **** pthread_mutex_unlock(&fuse->lock);
3942 .loc 1 790 0
3943 00e8 FFF7FEFF bl pthread_mutex_unlock(PLT)
3944 .LVL435:
791:system/core/sdcard/sdcard.c **** fuse_reply(fuse, unique, &out, sizeof(out));
3945 .loc 1 791 0
3946 00ec 53EC182B fmrrd r2, r3, d8 @ int
3947 00f0 4046 mov r0, r8
3948 00f2 CDF800A0 str sl, [sp, #0]
3949 00f6 0197 str r7, [sp, #4]
3950 00f8 FFF7FEFF bl fuse_reply(PLT)
3951 .LVL436:
792:system/core/sdcard/sdcard.c **** return NO_STATUS;
3952 .loc 1 792 0
3953 00fc 0120 movs r0, #1
3954 00fe 0DE0 b .L311
3955 .LVL437:
3956 .L306:
3957 .LBB489:
3958 .LBB481:
3959 .LBB479:
3960 .LBB480:
251:system/core/sdcard/sdcard.c **** node->refcount++;
3961 .loc 1 251 0
3962 0100 3368 ldr r3, [r6, #0]
3963 0102 581C adds r0, r3, #1
3964 0104 3060 str r0, [r6, #0]
3965 0106 A5E7 b .L309
3966 .L312:
3967 .LBE480:
3968 .LBE479:
679:system/core/sdcard/sdcard.c **** child = create_node_locked(fuse, parent, name, actual_name);
ARM GAS /tmp/cc3I8rcL.s page 117
3969 .loc 1 679 0
3970 0108 4046 mov r0, r8
3971 010a 2946 mov r1, r5
3972 010c 489B ldr r3, [sp, #288]
3973 010e 2246 mov r2, r4
3974 0110 FFF7FEFF bl create_node_locked(PLT)
3975 .LVL438:
3976 .LBE481:
3977 .LBE489:
780:system/core/sdcard/sdcard.c **** if (!node) {
3978 .loc 1 780 0
3979 0114 0646 mov r6, r0
3980 .LVL439:
3981 0116 0028 cmp r0, #0
3982 0118 9CD1 bne .L309
3983 011a 95E7 b .L310
3984 .LVL440:
3985 .L311:
793:system/core/sdcard/sdcard.c **** }
3986 .loc 1 793 0
3987 011c 3DB0 add sp, sp, #244
3988 011e BDEC028B fldmfdd sp!, {d8}
3989 0122 BDE8F085 pop {r4, r5, r6, r7, r8, sl, pc}
3990 .cfi_endproc
3991 .LFE87:
3992 .fnend
3994 .section .text.handle_lookup.isra.22,"ax",%progbits
3995 .align 1
3996 .thumb
3997 .thumb_func
3999 handle_lookup.isra.22:
4000 .fnstart
4001 .LFB143:
811:system/core/sdcard/sdcard.c **** static int handle_lookup(struct fuse* fuse, struct fuse_handler* handler,
4002 .loc 1 811 0
4003 .cfi_startproc
4004 @ args = 0, pretend = 0, frame = 8200
4005 @ frame_needed = 0, uses_anonymous_args = 0
4006 .LVL441:
4007 0000 2D4B ldr r3, .L322
4008 0002 2DE9F047 push {r4, r5, r6, r7, r8, r9, sl, lr}
4009 .save {r4, r5, r6, r7, r8, r9, sl, lr}
4010 .LCFI46:
4011 .cfi_def_cfa_offset 32
4012 .cfi_offset 4, -32
4013 .cfi_offset 5, -28
4014 .cfi_offset 6, -24
4015 .cfi_offset 7, -20
4016 .cfi_offset 8, -16
4017 .cfi_offset 9, -12
4018 .cfi_offset 10, -8
4019 .cfi_offset 14, -4
4020 0006 1546 mov r5, r2
4021 0008 2C4A ldr r2, .L322+4
4022 .LVL442:
4023 .pad #8192
4024 000a ADF5005D sub sp, sp, #8192
ARM GAS /tmp/cc3I8rcL.s page 118
4025 .LCFI47:
4026 .cfi_def_cfa_offset 8224
4027 000e 0F46 mov r7, r1
4028 .pad #24
4029 0010 86B0 sub sp, sp, #24
4030 .LCFI48:
4031 .cfi_def_cfa_offset 8248
811:system/core/sdcard/sdcard.c **** static int handle_lookup(struct fuse* fuse, struct fuse_handler* handler,
4032 .loc 1 811 0
4033 0012 0446 mov r4, r0
4034 .LPIC34:
4035 0014 7B44 add r3, pc
4036 0016 0DF50051 add r1, sp, #8192
4037 .LVL443:
4038 001a 1431 adds r1, r1, #20
821:system/core/sdcard/sdcard.c **** parent_path, sizeof(parent_path));
4039 .loc 1 821 0
4040 001c 0DF1140A add sl, sp, #20
811:system/core/sdcard/sdcard.c **** static int handle_lookup(struct fuse* fuse, struct fuse_handler* handler,
4041 .loc 1 811 0
4042 0020 53F80280 ldr r8, [r3, r2]
4043 0024 D8F80030 ldr r3, [r8, #0]
4044 0028 0B60 str r3, [r1, #0]
4045 .LVL444:
819:system/core/sdcard/sdcard.c **** pthread_mutex_lock(&fuse->lock);
4046 .loc 1 819 0
4047 002a FFF7FEFF bl pthread_mutex_lock(PLT)
4048 .LVL445:
820:system/core/sdcard/sdcard.c **** parent_node = lookup_node_and_path_by_id_locked(fuse, hdr->nodeid,
4049 .loc 1 820 0
4050 002e D7E90423 ldrd r2, [r7, #16]
4051 0032 2046 mov r0, r4
4052 0034 CDF800A0 str sl, [sp, #0]
4053 0038 FFF7FEFF bl lookup_node_and_path_by_id_locked.constprop.28(PLT)
4054 .LVL446:
4055 003c 0646 mov r6, r0
4056 .LVL447:
824:system/core/sdcard/sdcard.c **** pthread_mutex_unlock(&fuse->lock);
4057 .loc 1 824 0
4058 003e 2046 mov r0, r4
4059 .LVL448:
4060 0040 FFF7FEFF bl pthread_mutex_unlock(PLT)
4061 .LVL449:
826:system/core/sdcard/sdcard.c **** if (!parent_node || !(actual_name = find_file_within(parent_path, name,
4062 .loc 1 826 0
4063 0044 16B9 cbnz r6, .L314
4064 .L316:
828:system/core/sdcard/sdcard.c **** return -ENOENT;
4065 .loc 1 828 0
4066 0046 6FF00100 mvn r0, #1
4067 004a 25E0 b .L315
4068 .L314:
827:system/core/sdcard/sdcard.c **** child_path, sizeof(child_path), 1))) {
4069 .loc 1 827 0
4070 004c 0DF58059 add r9, sp, #4096
826:system/core/sdcard/sdcard.c **** if (!parent_node || !(actual_name = find_file_within(parent_path, name,
4071 .loc 1 826 0
ARM GAS /tmp/cc3I8rcL.s page 119
4072 0050 5046 mov r0, sl
827:system/core/sdcard/sdcard.c **** child_path, sizeof(child_path), 1))) {
4073 .loc 1 827 0
4074 0052 09F11409 add r9, r9, #20
826:system/core/sdcard/sdcard.c **** if (!parent_node || !(actual_name = find_file_within(parent_path, name,
4075 .loc 1 826 0
4076 0056 2946 mov r1, r5
4077 0058 4A46 mov r2, r9
4078 005a 0123 movs r3, #1
4079 005c FFF7FEFF bl find_file_within.constprop.27(PLT)
4080 .LVL450:
4081 0060 8246 mov sl, r0
4082 0062 0028 cmp r0, #0
4083 0064 EFD0 beq .L316
830:system/core/sdcard/sdcard.c **** if (!check_caller_access_to_name(fuse, hdr, parent_node, name, R_OK, false)) {
4084 .loc 1 830 0
4085 0066 0422 movs r2, #4
4086 0068 0023 movs r3, #0
4087 006a 2046 mov r0, r4
4088 .LVL451:
4089 006c 3946 mov r1, r7
4090 006e 8DE80C00 stmia sp, {r2, r3}
4091 0072 3246 mov r2, r6
4092 0074 2B46 mov r3, r5
4093 0076 FFF7FEFF bl check_caller_access_to_name(PLT)
4094 .LVL452:
4095 007a 58B1 cbz r0, .L318
834:system/core/sdcard/sdcard.c **** return fuse_reply_entry(fuse, hdr->unique, parent_node, name, actual_name, child_path);
4096 .loc 1 834 0
4097 007c D7E90223 ldrd r2, [r7, #8]
4098 0080 2046 mov r0, r4
4099 0082 0096 str r6, [sp, #0]
4100 0084 0195 str r5, [sp, #4]
4101 0086 CDF808A0 str sl, [sp, #8]
4102 008a CDF80C90 str r9, [sp, #12]
4103 008e FFF7FEFF bl fuse_reply_entry(PLT)
4104 .LVL453:
4105 0092 01E0 b .L315
4106 .L318:
831:system/core/sdcard/sdcard.c **** return -EACCES;
4107 .loc 1 831 0
4108 0094 6FF00C00 mvn r0, #12
4109 .LVL454:
4110 .L315:
835:system/core/sdcard/sdcard.c **** }
4111 .loc 1 835 0
4112 0098 0DF50052 add r2, sp, #8192
4113 009c 1432 adds r2, r2, #20
4114 009e 1168 ldr r1, [r2, #0]
4115 00a0 D8F80030 ldr r3, [r8, #0]
4116 00a4 9942 cmp r1, r3
4117 00a6 01D0 beq .L317
4118 00a8 FFF7FEFF bl __stack_chk_fail(PLT)
4119 .LVL455:
4120 .L317:
4121 00ac 06B0 add sp, sp, #24
4122 00ae 0DF5005D add sp, sp, #8192
ARM GAS /tmp/cc3I8rcL.s page 120
4123 00b2 BDE8F087 pop {r4, r5, r6, r7, r8, r9, sl, pc}
4124 .L323:
4125 00b6 00BF .align 2
4126 .L322:
4127 00b8 A0000000 .word _GLOBAL_OFFSET_TABLE_-(.LPIC34+4)
4128 00bc 00000000 .word __stack_chk_guard(GOT)
4129 .cfi_endproc
4130 .LFE143:
4131 .fnend
4133 .section .text.handle_mknod.isra.23,"ax",%progbits
4134 .align 1
4135 .thumb
4136 .thumb_func
4138 handle_mknod.isra.23:
4139 .fnstart
4140 .LFB144:
941:system/core/sdcard/sdcard.c **** static int handle_mknod(struct fuse* fuse, struct fuse_handler* handler,
4141 .loc 1 941 0
4142 .cfi_startproc
4143 @ args = 0, pretend = 0, frame = 8208
4144 @ frame_needed = 0, uses_anonymous_args = 0
4145 .LVL456:
4146 0000 2DE9F04F push {r4, r5, r6, r7, r8, r9, sl, fp, lr}
4147 .save {r4, r5, r6, r7, r8, r9, sl, fp, lr}
4148 .LCFI49:
4149 .cfi_def_cfa_offset 36
4150 .cfi_offset 4, -36
4151 .cfi_offset 5, -32
4152 .cfi_offset 6, -28
4153 .cfi_offset 7, -24
4154 .cfi_offset 8, -20
4155 .cfi_offset 9, -16
4156 .cfi_offset 10, -12
4157 .cfi_offset 11, -8
4158 .cfi_offset 14, -4
4159 0004 1F46 mov r7, r3
4160 0006 374B ldr r3, .L334
4161 .LVL457:
4162 0008 9246 mov sl, r2
4163 .pad #8192
4164 000a ADF5005D sub sp, sp, #8192
4165 .LCFI50:
4166 .cfi_def_cfa_offset 8228
4167 000e 364A ldr r2, .L334+4
4168 .LVL458:
4169 .pad #36
4170 0010 89B0 sub sp, sp, #36
4171 .LCFI51:
4172 .cfi_def_cfa_offset 8264
941:system/core/sdcard/sdcard.c **** static int handle_mknod(struct fuse* fuse, struct fuse_handler* handler,
4173 .loc 1 941 0
4174 0012 0D46 mov r5, r1
4175 0014 0DF50051 add r1, sp, #8192
4176 .LVL459:
4177 0018 0446 mov r4, r0
4178 001a 1C31 adds r1, r1, #28
953:system/core/sdcard/sdcard.c **** parent_path, sizeof(parent_path));
ARM GAS /tmp/cc3I8rcL.s page 121
4179 .loc 1 953 0
4180 001c 0DF11C09 add r9, sp, #28
941:system/core/sdcard/sdcard.c **** static int handle_mknod(struct fuse* fuse, struct fuse_handler* handler,
4181 .loc 1 941 0
4182 .LPIC35:
4183 0020 7B44 add r3, pc
4184 0022 9E58 ldr r6, [r3, r2]
4185 0024 3368 ldr r3, [r6, #0]
4186 0026 0B60 str r3, [r1, #0]
4187 .LVL460:
950:system/core/sdcard/sdcard.c **** pthread_mutex_lock(&fuse->lock);
4188 .loc 1 950 0
4189 0028 FFF7FEFF bl pthread_mutex_lock(PLT)
4190 .LVL461:
951:system/core/sdcard/sdcard.c **** has_rw = get_caller_has_rw_locked(fuse, hdr);
4191 .loc 1 951 0
4192 002c 2946 mov r1, r5
4193 002e 2046 mov r0, r4
4194 0030 FFF7FEFF bl get_caller_has_rw_locked(PLT)
4195 .LVL462:
4196 0034 8346 mov fp, r0
4197 .LVL463:
952:system/core/sdcard/sdcard.c **** parent_node = lookup_node_and_path_by_id_locked(fuse, hdr->nodeid,
4198 .loc 1 952 0
4199 0036 D5E90423 ldrd r2, [r5, #16]
4200 003a CDF80090 str r9, [sp, #0]
4201 003e 2046 mov r0, r4
4202 .LVL464:
4203 0040 FFF7FEFF bl lookup_node_and_path_by_id_locked.constprop.28(PLT)
4204 .LVL465:
4205 0044 8046 mov r8, r0
4206 .LVL466:
956:system/core/sdcard/sdcard.c **** pthread_mutex_unlock(&fuse->lock);
4207 .loc 1 956 0
4208 0046 2046 mov r0, r4
4209 .LVL467:
4210 0048 FFF7FEFF bl pthread_mutex_unlock(PLT)
4211 .LVL468:
4212 004c 0596 str r6, [sp, #20]
958:system/core/sdcard/sdcard.c **** if (!parent_node || !(actual_name = find_file_within(parent_path, name,
4213 .loc 1 958 0
4214 004e B8F1000F cmp r8, #0
4215 0052 02D1 bne .L325
4216 .L327:
960:system/core/sdcard/sdcard.c **** return -ENOENT;
4217 .loc 1 960 0
4218 0054 6FF00100 mvn r0, #1
4219 0058 35E0 b .L326
4220 .L325:
959:system/core/sdcard/sdcard.c **** child_path, sizeof(child_path), 1))) {
4221 .loc 1 959 0
4222 005a 0DF58056 add r6, sp, #4096
958:system/core/sdcard/sdcard.c **** if (!parent_node || !(actual_name = find_file_within(parent_path, name,
4223 .loc 1 958 0
4224 005e 4846 mov r0, r9
959:system/core/sdcard/sdcard.c **** child_path, sizeof(child_path), 1))) {
4225 .loc 1 959 0
ARM GAS /tmp/cc3I8rcL.s page 122
4226 0060 1C36 adds r6, r6, #28
958:system/core/sdcard/sdcard.c **** if (!parent_node || !(actual_name = find_file_within(parent_path, name,
4227 .loc 1 958 0
4228 0062 3946 mov r1, r7
4229 0064 3246 mov r2, r6
4230 0066 0123 movs r3, #1
4231 0068 FFF7FEFF bl find_file_within.constprop.27(PLT)
4232 .LVL469:
4233 006c 8146 mov r9, r0
4234 006e 0028 cmp r0, #0
4235 0070 F0D0 beq .L327
962:system/core/sdcard/sdcard.c **** if (!check_caller_access_to_name(fuse, hdr, parent_node, name, W_OK, has_rw)) {
4236 .loc 1 962 0
4237 0072 0223 movs r3, #2
4238 0074 2046 mov r0, r4
4239 .LVL470:
4240 0076 2946 mov r1, r5
4241 0078 4246 mov r2, r8
4242 007a 8DE80808 stmia sp, {r3, fp}
4243 007e 3B46 mov r3, r7
4244 0080 FFF7FEFF bl check_caller_access_to_name(PLT)
4245 .LVL471:
4246 0084 E8B1 cbz r0, .L330
4247 .LVL472:
965:system/core/sdcard/sdcard.c **** __u32 mode = (req->mode & (~0777)) | 0664;
4248 .loc 1 965 0
4249 0086 DAF80000 ldr r0, [sl, #0]
4250 008a 00F47E42 and r2, r0, #65024
966:system/core/sdcard/sdcard.c **** if (mknod(child_path, mode, req->rdev) < 0) {
4251 .loc 1 966 0
4252 008e 3046 mov r0, r6
4253 0090 42F4DA71 orr r1, r2, #436
4254 0094 DAF80420 ldr r2, [sl, #4]
4255 0098 FFF7FEFF bl mknod(PLT)
4256 .LVL473:
4257 009c 0028 cmp r0, #0
4258 009e 04DA bge .L328
967:system/core/sdcard/sdcard.c **** return -errno;
4259 .loc 1 967 0
4260 00a0 FFF7FEFF bl __errno(PLT)
4261 .LVL474:
4262 00a4 0368 ldr r3, [r0, #0]
4263 00a6 5842 negs r0, r3
4264 00a8 0DE0 b .L326
4265 .L328:
969:system/core/sdcard/sdcard.c **** return fuse_reply_entry(fuse, hdr->unique, parent_node, name, actual_name, child_path);
4266 .loc 1 969 0
4267 00aa D5E90223 ldrd r2, [r5, #8]
4268 00ae CDF80080 str r8, [sp, #0]
4269 00b2 2046 mov r0, r4
4270 00b4 0197 str r7, [sp, #4]
4271 00b6 CDF80890 str r9, [sp, #8]
4272 00ba 0396 str r6, [sp, #12]
4273 00bc FFF7FEFF bl fuse_reply_entry(PLT)
4274 .LVL475:
4275 00c0 01E0 b .L326
4276 .L330:
ARM GAS /tmp/cc3I8rcL.s page 123
963:system/core/sdcard/sdcard.c **** return -EACCES;
4277 .loc 1 963 0
4278 00c2 6FF00C00 mvn r0, #12
4279 .LVL476:
4280 .L326:
970:system/core/sdcard/sdcard.c **** }
4281 .loc 1 970 0
4282 00c6 059B ldr r3, [sp, #20]
4283 00c8 0DF50051 add r1, sp, #8192
4284 00cc 1C31 adds r1, r1, #28
4285 00ce 0A68 ldr r2, [r1, #0]
4286 00d0 1968 ldr r1, [r3, #0]
4287 00d2 8A42 cmp r2, r1
4288 00d4 01D0 beq .L329
4289 00d6 FFF7FEFF bl __stack_chk_fail(PLT)
4290 .LVL477:
4291 .L329:
4292 00da 09B0 add sp, sp, #36
4293 00dc 0DF5005D add sp, sp, #8192
4294 00e0 BDE8F08F pop {r4, r5, r6, r7, r8, r9, sl, fp, pc}
4295 .L335:
4296 .align 2
4297 .L334:
4298 00e4 C0000000 .word _GLOBAL_OFFSET_TABLE_-(.LPIC35+4)
4299 00e8 00000000 .word __stack_chk_guard(GOT)
4300 .cfi_endproc
4301 .LFE144:
4302 .fnend
4304 .section .text.handle_mkdir.isra.24,"ax",%progbits
4305 .align 1
4306 .thumb
4307 .thumb_func
4309 handle_mkdir.isra.24:
4310 .fnstart
4311 .LFB145:
972:system/core/sdcard/sdcard.c **** static int handle_mkdir(struct fuse* fuse, struct fuse_handler* handler,
4312 .loc 1 972 0
4313 .cfi_startproc
4314 @ args = 0, pretend = 0, frame = 12304
4315 @ frame_needed = 0, uses_anonymous_args = 0
4316 .LVL478:
4317 0000 2DE9F04F push {r4, r5, r6, r7, r8, r9, sl, fp, lr}
4318 .save {r4, r5, r6, r7, r8, r9, sl, fp, lr}
4319 .LCFI52:
4320 .cfi_def_cfa_offset 36
4321 .cfi_offset 4, -36
4322 .cfi_offset 5, -32
4323 .cfi_offset 6, -28
4324 .cfi_offset 7, -24
4325 .cfi_offset 8, -20
4326 .cfi_offset 9, -16
4327 .cfi_offset 10, -12
4328 .cfi_offset 11, -8
4329 .cfi_offset 14, -4
4330 0004 1D46 mov r5, r3
4331 0006 DFF88091 ldr r9, .L358
4332 .pad #12288
ARM GAS /tmp/cc3I8rcL.s page 124
4333 000a ADF5405D sub sp, sp, #12288
4334 .LCFI53:
4335 .cfi_def_cfa_offset 12324
4336 000e 8846 mov r8, r1
4337 0010 5E4B ldr r3, .L358+4
4338 .LVL479:
4339 .pad #36
4340 0012 89B0 sub sp, sp, #36
4341 .LCFI54:
4342 .cfi_def_cfa_offset 12360
972:system/core/sdcard/sdcard.c **** static int handle_mkdir(struct fuse* fuse, struct fuse_handler* handler,
4343 .loc 1 972 0
4344 0014 0446 mov r4, r0
4345 0016 0DF54051 add r1, sp, #12288
4346 .LVL480:
984:system/core/sdcard/sdcard.c **** parent_path, sizeof(parent_path));
4347 .loc 1 984 0
4348 001a 0DF11C0A add sl, sp, #28
972:system/core/sdcard/sdcard.c **** static int handle_mkdir(struct fuse* fuse, struct fuse_handler* handler,
4349 .loc 1 972 0
4350 001e 0492 str r2, [sp, #16]
4351 0020 1C31 adds r1, r1, #28
4352 .LPIC36:
4353 0022 F944 add r9, pc
4354 0024 59F80370 ldr r7, [r9, r3]
4355 0028 3A68 ldr r2, [r7, #0]
4356 .LVL481:
4357 002a 0A60 str r2, [r1, #0]
4358 .LVL482:
981:system/core/sdcard/sdcard.c **** pthread_mutex_lock(&fuse->lock);
4359 .loc 1 981 0
4360 002c FFF7FEFF bl pthread_mutex_lock(PLT)
4361 .LVL483:
982:system/core/sdcard/sdcard.c **** has_rw = get_caller_has_rw_locked(fuse, hdr);
4362 .loc 1 982 0
4363 0030 4146 mov r1, r8
4364 0032 2046 mov r0, r4
4365 0034 FFF7FEFF bl get_caller_has_rw_locked(PLT)
4366 .LVL484:
4367 0038 8346 mov fp, r0
4368 .LVL485:
983:system/core/sdcard/sdcard.c **** parent_node = lookup_node_and_path_by_id_locked(fuse, hdr->nodeid,
4369 .loc 1 983 0
4370 003a D8E90423 ldrd r2, [r8, #16]
4371 003e CDF800A0 str sl, [sp, #0]
4372 0042 2046 mov r0, r4
4373 .LVL486:
4374 0044 FFF7FEFF bl lookup_node_and_path_by_id_locked.constprop.28(PLT)
4375 .LVL487:
4376 0048 0646 mov r6, r0
4377 .LVL488:
987:system/core/sdcard/sdcard.c **** pthread_mutex_unlock(&fuse->lock);
4378 .loc 1 987 0
4379 004a 2046 mov r0, r4
4380 .LVL489:
4381 004c FFF7FEFF bl pthread_mutex_unlock(PLT)
4382 .LVL490:
ARM GAS /tmp/cc3I8rcL.s page 125
4383 0050 0597 str r7, [sp, #20]
989:system/core/sdcard/sdcard.c **** if (!parent_node || !(actual_name = find_file_within(parent_path, name,
4384 .loc 1 989 0
4385 0052 06B9 cbnz r6, .L337
4386 0054 79E0 b .L357
4387 .L337:
990:system/core/sdcard/sdcard.c **** child_path, sizeof(child_path), 1))) {
4388 .loc 1 990 0
4389 0056 0DF58057 add r7, sp, #4096
989:system/core/sdcard/sdcard.c **** if (!parent_node || !(actual_name = find_file_within(parent_path, name,
4390 .loc 1 989 0
4391 005a 5046 mov r0, sl
990:system/core/sdcard/sdcard.c **** child_path, sizeof(child_path), 1))) {
4392 .loc 1 990 0
4393 005c 1C37 adds r7, r7, #28
989:system/core/sdcard/sdcard.c **** if (!parent_node || !(actual_name = find_file_within(parent_path, name,
4394 .loc 1 989 0
4395 005e 2946 mov r1, r5
4396 0060 3A46 mov r2, r7
4397 0062 0123 movs r3, #1
4398 0064 FFF7FEFF bl find_file_within.constprop.27(PLT)
4399 .LVL491:
4400 0068 8246 mov sl, r0
4401 006a 0028 cmp r0, #0
4402 006c 6DD0 beq .L357
993:system/core/sdcard/sdcard.c **** if (!check_caller_access_to_name(fuse, hdr, parent_node, name, W_OK, has_rw)) {
4403 .loc 1 993 0
4404 006e 0223 movs r3, #2
4405 0070 2046 mov r0, r4
4406 .LVL492:
4407 0072 4146 mov r1, r8
4408 0074 3246 mov r2, r6
4409 0076 8DE80808 stmia sp, {r3, fp}
4410 007a 2B46 mov r3, r5
4411 007c FFF7FEFF bl check_caller_access_to_name(PLT)
4412 .LVL493:
4413 0080 0028 cmp r0, #0
4414 0082 70D0 beq .L346
4415 .LVL494:
996:system/core/sdcard/sdcard.c **** __u32 mode = (req->mode & (~0777)) | 0775;
4416 .loc 1 996 0
4417 0084 0498 ldr r0, [sp, #16]
4418 0086 0368 ldr r3, [r0, #0]
997:system/core/sdcard/sdcard.c **** if (mkdir(child_path, mode) < 0) {
4419 .loc 1 997 0
4420 0088 3846 mov r0, r7
996:system/core/sdcard/sdcard.c **** __u32 mode = (req->mode & (~0777)) | 0775;
4421 .loc 1 996 0
4422 008a 03F47E42 and r2, r3, #65024
997:system/core/sdcard/sdcard.c **** if (mkdir(child_path, mode) < 0) {
4423 .loc 1 997 0
4424 008e 42F4FE7C orr ip, r2, #508
4425 0092 4CF00101 orr r1, ip, #1
4426 0096 FFF7FEFF bl mkdir(PLT)
4427 .LVL495:
4428 009a 0028 cmp r0, #0
4429 009c 04DA bge .L340
ARM GAS /tmp/cc3I8rcL.s page 126
998:system/core/sdcard/sdcard.c **** return -errno;
4430 .loc 1 998 0
4431 009e FFF7FEFF bl __errno(PLT)
4432 .LVL496:
4433 00a2 0368 ldr r3, [r0, #0]
4434 00a4 5842 negs r0, r3
4435 00a6 60E0 b .L338
4436 .L340:
1002:system/core/sdcard/sdcard.c **** if (parent_node->perm == PERM_ANDROID && !strcasecmp(name, "data")) {
4437 .loc 1 1002 0
4438 00a8 B169 ldr r1, [r6, #24]
4439 00aa 0329 cmp r1, #3
4440 00ac 22D1 bne .L341
4441 00ae 3849 ldr r1, .L358+8
4442 00b0 2846 mov r0, r5
4443 .LPIC37:
4444 00b2 7944 add r1, pc
4445 00b4 FFF7FEFF bl strcasecmp(PLT)
4446 .LVL497:
4447 00b8 E0B9 cbnz r0, .L341
4448 .LVL498:
4449 .LBB490:
4450 .LBB491:
4451 .LBB492:
4452 .file 4 "bionic/libc/include/stdio.h"
1:bionic/libc/include/stdio.h **** /* $OpenBSD: stdio.h,v 1.35 2006/01/13 18:10:09 miod Exp $ */
2:bionic/libc/include/stdio.h **** /* $NetBSD: stdio.h,v 1.18 1996/04/25 18:29:21 jtc Exp $ */
3:bionic/libc/include/stdio.h ****
4:bionic/libc/include/stdio.h **** /*-
5:bionic/libc/include/stdio.h **** * Copyright (c) 1990 The Regents of the University of California.
6:bionic/libc/include/stdio.h **** * All rights reserved.
7:bionic/libc/include/stdio.h **** *
8:bionic/libc/include/stdio.h **** * This code is derived from software contributed to Berkeley by
9:bionic/libc/include/stdio.h **** * Chris Torek.
10:bionic/libc/include/stdio.h **** *
11:bionic/libc/include/stdio.h **** * Redistribution and use in source and binary forms, with or without
12:bionic/libc/include/stdio.h **** * modification, are permitted provided that the following conditions
13:bionic/libc/include/stdio.h **** * are met:
14:bionic/libc/include/stdio.h **** * 1. Redistributions of source code must retain the above copyright
15:bionic/libc/include/stdio.h **** * notice, this list of conditions and the following disclaimer.
16:bionic/libc/include/stdio.h **** * 2. Redistributions in binary form must reproduce the above copyright
17:bionic/libc/include/stdio.h **** * notice, this list of conditions and the following disclaimer in the
18:bionic/libc/include/stdio.h **** * documentation and/or other materials provided with the distribution.
19:bionic/libc/include/stdio.h **** * 3. Neither the name of the University nor the names of its contributors
20:bionic/libc/include/stdio.h **** * may be used to endorse or promote products derived from this software
21:bionic/libc/include/stdio.h **** * without specific prior written permission.
22:bionic/libc/include/stdio.h **** *
23:bionic/libc/include/stdio.h **** * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
24:bionic/libc/include/stdio.h **** * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
25:bionic/libc/include/stdio.h **** * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
26:bionic/libc/include/stdio.h **** * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
27:bionic/libc/include/stdio.h **** * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
28:bionic/libc/include/stdio.h **** * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
29:bionic/libc/include/stdio.h **** * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
30:bionic/libc/include/stdio.h **** * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
31:bionic/libc/include/stdio.h **** * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
32:bionic/libc/include/stdio.h **** * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
ARM GAS /tmp/cc3I8rcL.s page 127
33:bionic/libc/include/stdio.h **** * SUCH DAMAGE.
34:bionic/libc/include/stdio.h **** *
35:bionic/libc/include/stdio.h **** * @(#)stdio.h 5.17 (Berkeley) 6/3/91
36:bionic/libc/include/stdio.h **** */
37:bionic/libc/include/stdio.h ****
38:bionic/libc/include/stdio.h **** #ifndef _STDIO_H_
39:bionic/libc/include/stdio.h **** #define _STDIO_H_
40:bionic/libc/include/stdio.h ****
41:bionic/libc/include/stdio.h **** #include <sys/cdefs.h>
42:bionic/libc/include/stdio.h **** #include <sys/types.h>
43:bionic/libc/include/stdio.h ****
44:bionic/libc/include/stdio.h **** #include <stdarg.h>
45:bionic/libc/include/stdio.h **** #include <stddef.h>
46:bionic/libc/include/stdio.h ****
47:bionic/libc/include/stdio.h **** #define __need_NULL
48:bionic/libc/include/stdio.h **** #include <stddef.h>
49:bionic/libc/include/stdio.h ****
50:bionic/libc/include/stdio.h **** #define _FSTDIO /* Define for new stdio with functions. */
51:bionic/libc/include/stdio.h ****
52:bionic/libc/include/stdio.h **** typedef off_t fpos_t; /* stdio file position type */
53:bionic/libc/include/stdio.h ****
54:bionic/libc/include/stdio.h **** /*
55:bionic/libc/include/stdio.h **** * NB: to fit things in six character monocase externals, the stdio
56:bionic/libc/include/stdio.h **** * code uses the prefix `__s' for stdio objects, typically followed
57:bionic/libc/include/stdio.h **** * by a three-character attempt at a mnemonic.
58:bionic/libc/include/stdio.h **** */
59:bionic/libc/include/stdio.h ****
60:bionic/libc/include/stdio.h **** /* stdio buffers */
61:bionic/libc/include/stdio.h **** struct __sbuf {
62:bionic/libc/include/stdio.h **** unsigned char *_base;
63:bionic/libc/include/stdio.h **** int _size;
64:bionic/libc/include/stdio.h **** };
65:bionic/libc/include/stdio.h ****
66:bionic/libc/include/stdio.h **** /*
67:bionic/libc/include/stdio.h **** * stdio state variables.
68:bionic/libc/include/stdio.h **** *
69:bionic/libc/include/stdio.h **** * The following always hold:
70:bionic/libc/include/stdio.h **** *
71:bionic/libc/include/stdio.h **** * if (_flags&(__SLBF|__SWR)) == (__SLBF|__SWR),
72:bionic/libc/include/stdio.h **** * _lbfsize is -_bf._size, else _lbfsize is 0
73:bionic/libc/include/stdio.h **** * if _flags&__SRD, _w is 0
74:bionic/libc/include/stdio.h **** * if _flags&__SWR, _r is 0
75:bionic/libc/include/stdio.h **** *
76:bionic/libc/include/stdio.h **** * This ensures that the getc and putc macros (or inline functions) never
77:bionic/libc/include/stdio.h **** * try to write or read from a file that is in `read' or `write' mode.
78:bionic/libc/include/stdio.h **** * (Moreover, they can, and do, automatically switch from read mode to
79:bionic/libc/include/stdio.h **** * write mode, and back, on "r+" and "w+" files.)
80:bionic/libc/include/stdio.h **** *
81:bionic/libc/include/stdio.h **** * _lbfsize is used only to make the inline line-buffered output stream
82:bionic/libc/include/stdio.h **** * code as compact as possible.
83:bionic/libc/include/stdio.h **** *
84:bionic/libc/include/stdio.h **** * _ub, _up, and _ur are used when ungetc() pushes back more characters
85:bionic/libc/include/stdio.h **** * than fit in the current _bf, or when ungetc() pushes back a character
86:bionic/libc/include/stdio.h **** * that does not match the previous one in _bf. When this happens,
87:bionic/libc/include/stdio.h **** * _ub._base becomes non-nil (i.e., a stream has ungetc() data iff
88:bionic/libc/include/stdio.h **** * _ub._base!=NULL) and _up and _ur save the current values of _p and _r.
89:bionic/libc/include/stdio.h **** *
ARM GAS /tmp/cc3I8rcL.s page 128
90:bionic/libc/include/stdio.h **** * NOTE: if you change this structure, you also need to update the
91:bionic/libc/include/stdio.h **** * std() initializer in findfp.c.
92:bionic/libc/include/stdio.h **** */
93:bionic/libc/include/stdio.h **** typedef struct __sFILE {
94:bionic/libc/include/stdio.h **** unsigned char *_p; /* current position in (some) buffer */
95:bionic/libc/include/stdio.h **** int _r; /* read space left for getc() */
96:bionic/libc/include/stdio.h **** int _w; /* write space left for putc() */
97:bionic/libc/include/stdio.h **** short _flags; /* flags, below; this FILE is free if 0 */
98:bionic/libc/include/stdio.h **** short _file; /* fileno, if Unix descriptor, else -1 */
99:bionic/libc/include/stdio.h **** struct __sbuf _bf; /* the buffer (at least 1 byte, if !NULL) */
100:bionic/libc/include/stdio.h **** int _lbfsize; /* 0 or -_bf._size, for inline putc */
101:bionic/libc/include/stdio.h ****
102:bionic/libc/include/stdio.h **** /* operations */
103:bionic/libc/include/stdio.h **** void *_cookie; /* cookie passed to io functions */
104:bionic/libc/include/stdio.h **** int (*_close)(void *);
105:bionic/libc/include/stdio.h **** int (*_read)(void *, char *, int);
106:bionic/libc/include/stdio.h **** fpos_t (*_seek)(void *, fpos_t, int);
107:bionic/libc/include/stdio.h **** int (*_write)(void *, const char *, int);
108:bionic/libc/include/stdio.h ****
109:bionic/libc/include/stdio.h **** /* extension data, to avoid further ABI breakage */
110:bionic/libc/include/stdio.h **** struct __sbuf _ext;
111:bionic/libc/include/stdio.h **** /* data for long sequences of ungetc() */
112:bionic/libc/include/stdio.h **** unsigned char *_up; /* saved _p when _p is doing ungetc data */
113:bionic/libc/include/stdio.h **** int _ur; /* saved _r when _r is counting ungetc data */
114:bionic/libc/include/stdio.h ****
115:bionic/libc/include/stdio.h **** /* tricks to meet minimum requirements even when malloc() fails */
116:bionic/libc/include/stdio.h **** unsigned char _ubuf[3]; /* guarantee an ungetc() buffer */
117:bionic/libc/include/stdio.h **** unsigned char _nbuf[1]; /* guarantee a getc() buffer */
118:bionic/libc/include/stdio.h ****
119:bionic/libc/include/stdio.h **** /* separate buffer for fgetln() when line crosses buffer boundary */
120:bionic/libc/include/stdio.h **** struct __sbuf _lb; /* buffer for fgetln() */
121:bionic/libc/include/stdio.h ****
122:bionic/libc/include/stdio.h **** /* Unix stdio files get aligned to block boundaries on fseek() */
123:bionic/libc/include/stdio.h **** int _blksize; /* stat.st_blksize (may be != _bf._size) */
124:bionic/libc/include/stdio.h **** fpos_t _offset; /* current lseek offset */
125:bionic/libc/include/stdio.h **** } FILE;
126:bionic/libc/include/stdio.h ****
127:bionic/libc/include/stdio.h **** __BEGIN_DECLS
128:bionic/libc/include/stdio.h **** extern FILE __sF[];
129:bionic/libc/include/stdio.h **** __END_DECLS
130:bionic/libc/include/stdio.h ****
131:bionic/libc/include/stdio.h **** #define __SLBF 0x0001 /* line buffered */
132:bionic/libc/include/stdio.h **** #define __SNBF 0x0002 /* unbuffered */
133:bionic/libc/include/stdio.h **** #define __SRD 0x0004 /* OK to read */
134:bionic/libc/include/stdio.h **** #define __SWR 0x0008 /* OK to write */
135:bionic/libc/include/stdio.h **** /* RD and WR are never simultaneously asserted */
136:bionic/libc/include/stdio.h **** #define __SRW 0x0010 /* open for reading & writing */
137:bionic/libc/include/stdio.h **** #define __SEOF 0x0020 /* found EOF */
138:bionic/libc/include/stdio.h **** #define __SERR 0x0040 /* found error */
139:bionic/libc/include/stdio.h **** #define __SMBF 0x0080 /* _buf is from malloc */
140:bionic/libc/include/stdio.h **** #define __SAPP 0x0100 /* fdopen()ed in append mode */
141:bionic/libc/include/stdio.h **** #define __SSTR 0x0200 /* this is an sprintf/snprintf string */
142:bionic/libc/include/stdio.h **** #define __SOPT 0x0400 /* do fseek() optimization */
143:bionic/libc/include/stdio.h **** #define __SNPT 0x0800 /* do not do fseek() optimization */
144:bionic/libc/include/stdio.h **** #define __SOFF 0x1000 /* set iff _offset is in fact correct */
145:bionic/libc/include/stdio.h **** #define __SMOD 0x2000 /* true => fgetln modified _p text */
146:bionic/libc/include/stdio.h **** #define __SALC 0x4000 /* allocate string space dynamically */
ARM GAS /tmp/cc3I8rcL.s page 129
147:bionic/libc/include/stdio.h **** #define __SIGN 0x8000 /* ignore this file in _fwalk */
148:bionic/libc/include/stdio.h ****
149:bionic/libc/include/stdio.h **** /*
150:bionic/libc/include/stdio.h **** * The following three definitions are for ANSI C, which took them
151:bionic/libc/include/stdio.h **** * from System V, which brilliantly took internal interface macros and
152:bionic/libc/include/stdio.h **** * made them official arguments to setvbuf(), without renaming them.
153:bionic/libc/include/stdio.h **** * Hence, these ugly _IOxxx names are *supposed* to appear in user code.
154:bionic/libc/include/stdio.h **** *
155:bionic/libc/include/stdio.h **** * Although numbered as their counterparts above, the implementation
156:bionic/libc/include/stdio.h **** * does not rely on this.
157:bionic/libc/include/stdio.h **** */
158:bionic/libc/include/stdio.h **** #define _IOFBF 0 /* setvbuf should set fully buffered */
159:bionic/libc/include/stdio.h **** #define _IOLBF 1 /* setvbuf should set line buffered */
160:bionic/libc/include/stdio.h **** #define _IONBF 2 /* setvbuf should set unbuffered */
161:bionic/libc/include/stdio.h ****
162:bionic/libc/include/stdio.h **** #define BUFSIZ 1024 /* size of buffer used by setbuf */
163:bionic/libc/include/stdio.h **** #define EOF (-1)
164:bionic/libc/include/stdio.h ****
165:bionic/libc/include/stdio.h **** /*
166:bionic/libc/include/stdio.h **** * FOPEN_MAX is a minimum maximum, and is the number of streams that
167:bionic/libc/include/stdio.h **** * stdio can provide without attempting to allocate further resources
168:bionic/libc/include/stdio.h **** * (which could fail). Do not use this for anything.
169:bionic/libc/include/stdio.h **** */
170:bionic/libc/include/stdio.h ****
171:bionic/libc/include/stdio.h **** #define FOPEN_MAX 20 /* must be <= OPEN_MAX <sys/syslimits.h> */
172:bionic/libc/include/stdio.h **** #define FILENAME_MAX 1024 /* must be <= PATH_MAX <sys/syslimits.h> */
173:bionic/libc/include/stdio.h ****
174:bionic/libc/include/stdio.h **** /* System V/ANSI C; this is the wrong way to do this, do *not* use these. */
175:bionic/libc/include/stdio.h **** #if __BSD_VISIBLE || __XPG_VISIBLE
176:bionic/libc/include/stdio.h **** #define P_tmpdir "/tmp/"
177:bionic/libc/include/stdio.h **** #endif
178:bionic/libc/include/stdio.h **** #define L_tmpnam 1024 /* XXX must be == PATH_MAX */
179:bionic/libc/include/stdio.h **** #define TMP_MAX 308915776
180:bionic/libc/include/stdio.h ****
181:bionic/libc/include/stdio.h **** /* Always ensure that these are consistent with <fcntl.h> and <unistd.h>! */
182:bionic/libc/include/stdio.h **** #ifndef SEEK_SET
183:bionic/libc/include/stdio.h **** #define SEEK_SET 0 /* set file offset to offset */
184:bionic/libc/include/stdio.h **** #endif
185:bionic/libc/include/stdio.h **** #ifndef SEEK_CUR
186:bionic/libc/include/stdio.h **** #define SEEK_CUR 1 /* set file offset to current plus offset */
187:bionic/libc/include/stdio.h **** #endif
188:bionic/libc/include/stdio.h **** #ifndef SEEK_END
189:bionic/libc/include/stdio.h **** #define SEEK_END 2 /* set file offset to EOF plus offset */
190:bionic/libc/include/stdio.h **** #endif
191:bionic/libc/include/stdio.h ****
192:bionic/libc/include/stdio.h **** #define stdin (&__sF[0])
193:bionic/libc/include/stdio.h **** #define stdout (&__sF[1])
194:bionic/libc/include/stdio.h **** #define stderr (&__sF[2])
195:bionic/libc/include/stdio.h ****
196:bionic/libc/include/stdio.h **** /*
197:bionic/libc/include/stdio.h **** * Functions defined in ANSI C standard.
198:bionic/libc/include/stdio.h **** */
199:bionic/libc/include/stdio.h **** __BEGIN_DECLS
200:bionic/libc/include/stdio.h **** void clearerr(FILE *);
201:bionic/libc/include/stdio.h **** int fclose(FILE *);
202:bionic/libc/include/stdio.h **** int feof(FILE *);
203:bionic/libc/include/stdio.h **** int ferror(FILE *);
ARM GAS /tmp/cc3I8rcL.s page 130
204:bionic/libc/include/stdio.h **** int fflush(FILE *);
205:bionic/libc/include/stdio.h **** int fgetc(FILE *);
206:bionic/libc/include/stdio.h **** char *fgets(char * __restrict, int, FILE * __restrict);
207:bionic/libc/include/stdio.h **** FILE *fopen(const char * __restrict , const char * __restrict);
208:bionic/libc/include/stdio.h **** int fprintf(FILE * __restrict , const char * __restrict, ...)
209:bionic/libc/include/stdio.h **** __printflike(2, 3);
210:bionic/libc/include/stdio.h **** int fputc(int, FILE *);
211:bionic/libc/include/stdio.h **** int fputs(const char * __restrict, FILE * __restrict);
212:bionic/libc/include/stdio.h **** size_t fread(void * __restrict, size_t, size_t, FILE * __restrict);
213:bionic/libc/include/stdio.h **** FILE *freopen(const char * __restrict, const char * __restrict,
214:bionic/libc/include/stdio.h **** FILE * __restrict);
215:bionic/libc/include/stdio.h **** int fscanf(FILE * __restrict, const char * __restrict, ...)
216:bionic/libc/include/stdio.h **** __scanflike(2, 3);
217:bionic/libc/include/stdio.h **** int fseek(FILE *, long, int);
218:bionic/libc/include/stdio.h **** long ftell(FILE *);
219:bionic/libc/include/stdio.h **** size_t fwrite(const void * __restrict, size_t, size_t, FILE * __restrict);
220:bionic/libc/include/stdio.h **** int getc(FILE *);
221:bionic/libc/include/stdio.h **** int getchar(void);
222:bionic/libc/include/stdio.h **** ssize_t getdelim(char ** __restrict, size_t * __restrict, int,
223:bionic/libc/include/stdio.h **** FILE * __restrict);
224:bionic/libc/include/stdio.h **** ssize_t getline(char ** __restrict, size_t * __restrict, FILE * __restrict);
225:bionic/libc/include/stdio.h **** char *gets(char *);
226:bionic/libc/include/stdio.h **** #if __BSD_VISIBLE && !defined(__SYS_ERRLIST)
227:bionic/libc/include/stdio.h **** #define __SYS_ERRLIST
228:bionic/libc/include/stdio.h ****
229:bionic/libc/include/stdio.h **** extern int sys_nerr; /* perror(3) external variables */
230:bionic/libc/include/stdio.h **** extern char *sys_errlist[];
231:bionic/libc/include/stdio.h **** #endif
232:bionic/libc/include/stdio.h **** void perror(const char *);
233:bionic/libc/include/stdio.h **** int printf(const char * __restrict, ...)
234:bionic/libc/include/stdio.h **** __printflike(1, 2);
235:bionic/libc/include/stdio.h **** int putc(int, FILE *);
236:bionic/libc/include/stdio.h **** int putchar(int);
237:bionic/libc/include/stdio.h **** int puts(const char *);
238:bionic/libc/include/stdio.h **** int remove(const char *);
239:bionic/libc/include/stdio.h **** void rewind(FILE *);
240:bionic/libc/include/stdio.h **** int scanf(const char * __restrict, ...)
241:bionic/libc/include/stdio.h **** __scanflike(1, 2);
242:bionic/libc/include/stdio.h **** void setbuf(FILE * __restrict, char * __restrict);
243:bionic/libc/include/stdio.h **** int setvbuf(FILE * __restrict, char * __restrict, int, size_t);
244:bionic/libc/include/stdio.h **** int sscanf(const char * __restrict, const char * __restrict, ...)
245:bionic/libc/include/stdio.h **** __scanflike(2, 3);
246:bionic/libc/include/stdio.h **** FILE *tmpfile(void);
247:bionic/libc/include/stdio.h **** int ungetc(int, FILE *);
248:bionic/libc/include/stdio.h **** int vfprintf(FILE * __restrict, const char * __restrict, __va_list)
249:bionic/libc/include/stdio.h **** __printflike(2, 0);
250:bionic/libc/include/stdio.h **** int vprintf(const char * __restrict, __va_list)
251:bionic/libc/include/stdio.h **** __printflike(1, 0);
252:bionic/libc/include/stdio.h ****
253:bionic/libc/include/stdio.h **** #ifndef __AUDIT__
254:bionic/libc/include/stdio.h **** char *gets(char *);
255:bionic/libc/include/stdio.h **** int sprintf(char * __restrict, const char * __restrict, ...)
256:bionic/libc/include/stdio.h **** __printflike(2, 3);
257:bionic/libc/include/stdio.h **** char *tmpnam(char *);
258:bionic/libc/include/stdio.h **** int vsprintf(char * __restrict, const char * __restrict,
259:bionic/libc/include/stdio.h **** __va_list)
260:bionic/libc/include/stdio.h **** __printflike(2, 0);
ARM GAS /tmp/cc3I8rcL.s page 131
261:bionic/libc/include/stdio.h **** #endif
262:bionic/libc/include/stdio.h ****
263:bionic/libc/include/stdio.h **** int rename (const char *, const char *);
264:bionic/libc/include/stdio.h ****
265:bionic/libc/include/stdio.h **** int fgetpos(FILE * __restrict, fpos_t * __restrict);
266:bionic/libc/include/stdio.h **** int fsetpos(FILE *, const fpos_t *);
267:bionic/libc/include/stdio.h ****
268:bionic/libc/include/stdio.h **** int fseeko(FILE *, off_t, int);
269:bionic/libc/include/stdio.h **** off_t ftello(FILE *);
270:bionic/libc/include/stdio.h ****
271:bionic/libc/include/stdio.h **** #if __ISO_C_VISIBLE >= 1999 || __BSD_VISIBLE
272:bionic/libc/include/stdio.h **** int snprintf(char * __restrict, size_t, const char * __restrict, ...)
273:bionic/libc/include/stdio.h **** __printflike(3, 4);
274:bionic/libc/include/stdio.h **** int vfscanf(FILE * __restrict, const char * __restrict, __va_list)
275:bionic/libc/include/stdio.h **** __scanflike(2, 0);
276:bionic/libc/include/stdio.h **** int vscanf(const char *, __va_list)
277:bionic/libc/include/stdio.h **** __scanflike(1, 0);
278:bionic/libc/include/stdio.h **** int vsnprintf(char * __restrict, size_t, const char * __restrict, __va_list)
279:bionic/libc/include/stdio.h **** __printflike(3, 0);
280:bionic/libc/include/stdio.h **** int vsscanf(const char * __restrict, const char * __restrict, __va_list)
281:bionic/libc/include/stdio.h **** __scanflike(2, 0);
282:bionic/libc/include/stdio.h **** #endif /* __ISO_C_VISIBLE >= 1999 || __BSD_VISIBLE */
283:bionic/libc/include/stdio.h ****
284:bionic/libc/include/stdio.h **** __END_DECLS
285:bionic/libc/include/stdio.h ****
286:bionic/libc/include/stdio.h ****
287:bionic/libc/include/stdio.h **** /*
288:bionic/libc/include/stdio.h **** * Functions defined in POSIX 1003.1.
289:bionic/libc/include/stdio.h **** */
290:bionic/libc/include/stdio.h **** #if __BSD_VISIBLE || __POSIX_VISIBLE || __XPG_VISIBLE
291:bionic/libc/include/stdio.h **** #define L_ctermid 1024 /* size for ctermid(); PATH_MAX */
292:bionic/libc/include/stdio.h **** #define L_cuserid 9 /* size for cuserid(); UT_NAMESIZE + 1 */
293:bionic/libc/include/stdio.h ****
294:bionic/libc/include/stdio.h **** __BEGIN_DECLS
295:bionic/libc/include/stdio.h **** #if 0 /* MISSING FROM BIONIC */
296:bionic/libc/include/stdio.h **** char *ctermid(char *);
297:bionic/libc/include/stdio.h **** char *cuserid(char *);
298:bionic/libc/include/stdio.h **** #endif /* MISSING */
299:bionic/libc/include/stdio.h **** FILE *fdopen(int, const char *);
300:bionic/libc/include/stdio.h **** int fileno(FILE *);
301:bionic/libc/include/stdio.h ****
302:bionic/libc/include/stdio.h **** #if (__POSIX_VISIBLE >= 199209)
303:bionic/libc/include/stdio.h **** int pclose(FILE *);
304:bionic/libc/include/stdio.h **** FILE *popen(const char *, const char *);
305:bionic/libc/include/stdio.h **** #endif
306:bionic/libc/include/stdio.h ****
307:bionic/libc/include/stdio.h **** #if __POSIX_VISIBLE >= 199506
308:bionic/libc/include/stdio.h **** void flockfile(FILE *);
309:bionic/libc/include/stdio.h **** int ftrylockfile(FILE *);
310:bionic/libc/include/stdio.h **** void funlockfile(FILE *);
311:bionic/libc/include/stdio.h ****
312:bionic/libc/include/stdio.h **** /*
313:bionic/libc/include/stdio.h **** * These are normally used through macros as defined below, but POSIX
314:bionic/libc/include/stdio.h **** * requires functions as well.
315:bionic/libc/include/stdio.h **** */
316:bionic/libc/include/stdio.h **** int getc_unlocked(FILE *);
317:bionic/libc/include/stdio.h **** int getchar_unlocked(void);
ARM GAS /tmp/cc3I8rcL.s page 132
318:bionic/libc/include/stdio.h **** int putc_unlocked(int, FILE *);
319:bionic/libc/include/stdio.h **** int putchar_unlocked(int);
320:bionic/libc/include/stdio.h **** #endif /* __POSIX_VISIBLE >= 199506 */
321:bionic/libc/include/stdio.h ****
322:bionic/libc/include/stdio.h **** #if __XPG_VISIBLE
323:bionic/libc/include/stdio.h **** char *tempnam(const char *, const char *);
324:bionic/libc/include/stdio.h **** #endif
325:bionic/libc/include/stdio.h **** __END_DECLS
326:bionic/libc/include/stdio.h ****
327:bionic/libc/include/stdio.h **** #endif /* __BSD_VISIBLE || __POSIX_VISIBLE || __XPG_VISIBLE */
328:bionic/libc/include/stdio.h ****
329:bionic/libc/include/stdio.h **** /*
330:bionic/libc/include/stdio.h **** * Routines that are purely local.
331:bionic/libc/include/stdio.h **** */
332:bionic/libc/include/stdio.h **** #if __BSD_VISIBLE
333:bionic/libc/include/stdio.h **** __BEGIN_DECLS
334:bionic/libc/include/stdio.h **** int asprintf(char ** __restrict, const char * __restrict, ...)
335:bionic/libc/include/stdio.h **** __printflike(2, 3);
336:bionic/libc/include/stdio.h **** char *fgetln(FILE * __restrict, size_t * __restrict);
337:bionic/libc/include/stdio.h **** int fpurge(FILE *);
338:bionic/libc/include/stdio.h **** int getw(FILE *);
339:bionic/libc/include/stdio.h **** int putw(int, FILE *);
340:bionic/libc/include/stdio.h **** void setbuffer(FILE *, char *, int);
341:bionic/libc/include/stdio.h **** int setlinebuf(FILE *);
342:bionic/libc/include/stdio.h **** int vasprintf(char ** __restrict, const char * __restrict,
343:bionic/libc/include/stdio.h **** __va_list)
344:bionic/libc/include/stdio.h **** __printflike(2, 0);
345:bionic/libc/include/stdio.h **** __END_DECLS
346:bionic/libc/include/stdio.h ****
347:bionic/libc/include/stdio.h **** /*
348:bionic/libc/include/stdio.h **** * Stdio function-access interface.
349:bionic/libc/include/stdio.h **** */
350:bionic/libc/include/stdio.h **** __BEGIN_DECLS
351:bionic/libc/include/stdio.h **** FILE *funopen(const void *,
352:bionic/libc/include/stdio.h **** int (*)(void *, char *, int),
353:bionic/libc/include/stdio.h **** int (*)(void *, const char *, int),
354:bionic/libc/include/stdio.h **** fpos_t (*)(void *, fpos_t, int),
355:bionic/libc/include/stdio.h **** int (*)(void *));
356:bionic/libc/include/stdio.h **** __END_DECLS
357:bionic/libc/include/stdio.h **** #define fropen(cookie, fn) funopen(cookie, fn, 0, 0, 0)
358:bionic/libc/include/stdio.h **** #define fwopen(cookie, fn) funopen(cookie, 0, fn, 0, 0)
359:bionic/libc/include/stdio.h **** #endif /* __BSD_VISIBLE */
360:bionic/libc/include/stdio.h ****
361:bionic/libc/include/stdio.h **** /*
362:bionic/libc/include/stdio.h **** * Functions internal to the implementation.
363:bionic/libc/include/stdio.h **** */
364:bionic/libc/include/stdio.h **** __BEGIN_DECLS
365:bionic/libc/include/stdio.h **** int __srget(FILE *);
366:bionic/libc/include/stdio.h **** int __swbuf(int, FILE *);
367:bionic/libc/include/stdio.h **** __END_DECLS
368:bionic/libc/include/stdio.h ****
369:bionic/libc/include/stdio.h **** /*
370:bionic/libc/include/stdio.h **** * The __sfoo macros are here so that we can
371:bionic/libc/include/stdio.h **** * define function versions in the C library.
372:bionic/libc/include/stdio.h **** */
373:bionic/libc/include/stdio.h **** #define __sgetc(p) (--(p)->_r < 0 ? __srget(p) : (int)(*(p)->_p++))
374:bionic/libc/include/stdio.h **** #if defined(__GNUC__)
ARM GAS /tmp/cc3I8rcL.s page 133
375:bionic/libc/include/stdio.h **** static __inline int __sputc(int _c, FILE *_p) {
376:bionic/libc/include/stdio.h **** if (--_p->_w >= 0 || (_p->_w >= _p->_lbfsize && (char)_c != '\n'))
377:bionic/libc/include/stdio.h **** return (*_p->_p++ = _c);
378:bionic/libc/include/stdio.h **** else
379:bionic/libc/include/stdio.h **** return (__swbuf(_c, _p));
380:bionic/libc/include/stdio.h **** }
381:bionic/libc/include/stdio.h **** #else
382:bionic/libc/include/stdio.h **** /*
383:bionic/libc/include/stdio.h **** * This has been tuned to generate reasonable code on the vax using pcc.
384:bionic/libc/include/stdio.h **** */
385:bionic/libc/include/stdio.h **** #define __sputc(c, p) \
386:bionic/libc/include/stdio.h **** (--(p)->_w < 0 ? \
387:bionic/libc/include/stdio.h **** (p)->_w >= (p)->_lbfsize ? \
388:bionic/libc/include/stdio.h **** (*(p)->_p = (c)), *(p)->_p != '\n' ? \
389:bionic/libc/include/stdio.h **** (int)*(p)->_p++ : \
390:bionic/libc/include/stdio.h **** __swbuf('\n', p) : \
391:bionic/libc/include/stdio.h **** __swbuf((int)(c), p) : \
392:bionic/libc/include/stdio.h **** (*(p)->_p = (c), (int)*(p)->_p++))
393:bionic/libc/include/stdio.h **** #endif
394:bionic/libc/include/stdio.h ****
395:bionic/libc/include/stdio.h **** #define __sfeof(p) (((p)->_flags & __SEOF) != 0)
396:bionic/libc/include/stdio.h **** #define __sferror(p) (((p)->_flags & __SERR) != 0)
397:bionic/libc/include/stdio.h **** #define __sclearerr(p) ((void)((p)->_flags &= ~(__SERR|__SEOF)))
398:bionic/libc/include/stdio.h **** #define __sfileno(p) ((p)->_file)
399:bionic/libc/include/stdio.h ****
400:bionic/libc/include/stdio.h **** extern int __isthreaded;
401:bionic/libc/include/stdio.h ****
402:bionic/libc/include/stdio.h **** #define feof(p) (!__isthreaded ? __sfeof(p) : (feof)(p))
403:bionic/libc/include/stdio.h **** #define ferror(p) (!__isthreaded ? __sferror(p) : (ferror)(p))
404:bionic/libc/include/stdio.h **** #define clearerr(p) (!__isthreaded ? __sclearerr(p) : (clearerr)(p))
405:bionic/libc/include/stdio.h ****
406:bionic/libc/include/stdio.h **** #if __POSIX_VISIBLE
407:bionic/libc/include/stdio.h **** #define fileno(p) (!__isthreaded ? __sfileno(p) : (fileno)(p))
408:bionic/libc/include/stdio.h **** #endif
409:bionic/libc/include/stdio.h ****
410:bionic/libc/include/stdio.h **** #define getc(fp) (!__isthreaded ? __sgetc(fp) : (getc)(fp))
411:bionic/libc/include/stdio.h ****
412:bionic/libc/include/stdio.h **** #if __BSD_VISIBLE
413:bionic/libc/include/stdio.h **** /*
414:bionic/libc/include/stdio.h **** * The macro implementations of putc and putc_unlocked are not
415:bionic/libc/include/stdio.h **** * fully POSIX compliant; they do not set errno on failure
416:bionic/libc/include/stdio.h **** */
417:bionic/libc/include/stdio.h **** #define putc(x, fp) (!__isthreaded ? __sputc(x, fp) : (putc)(x, fp))
418:bionic/libc/include/stdio.h **** #endif /* __BSD_VISIBLE */
419:bionic/libc/include/stdio.h ****
420:bionic/libc/include/stdio.h **** #ifndef lint
421:bionic/libc/include/stdio.h **** #if __POSIX_VISIBLE >= 199506
422:bionic/libc/include/stdio.h **** #define getc_unlocked(fp) __sgetc(fp)
423:bionic/libc/include/stdio.h **** /*
424:bionic/libc/include/stdio.h **** * The macro implementations of putc and putc_unlocked are not
425:bionic/libc/include/stdio.h **** * fully POSIX compliant; they do not set errno on failure
426:bionic/libc/include/stdio.h **** */
427:bionic/libc/include/stdio.h **** #if __BSD_VISIBLE
428:bionic/libc/include/stdio.h **** #define putc_unlocked(x, fp) __sputc(x, fp)
429:bionic/libc/include/stdio.h **** #endif /* __BSD_VISIBLE */
430:bionic/libc/include/stdio.h **** #endif /* __POSIX_VISIBLE >= 199506 */
431:bionic/libc/include/stdio.h **** #endif /* lint */
ARM GAS /tmp/cc3I8rcL.s page 134
432:bionic/libc/include/stdio.h ****
433:bionic/libc/include/stdio.h **** #define getchar() getc(stdin)
434:bionic/libc/include/stdio.h **** #define putchar(x) putc(x, stdout)
435:bionic/libc/include/stdio.h **** #define getchar_unlocked() getc_unlocked(stdin)
436:bionic/libc/include/stdio.h **** #define putchar_unlocked(c) putc_unlocked(c, stdout)
437:bionic/libc/include/stdio.h ****
438:bionic/libc/include/stdio.h **** #ifdef _GNU_SOURCE
439:bionic/libc/include/stdio.h **** /*
440:bionic/libc/include/stdio.h **** * glibc defines dprintf(int, const char*, ...), which is poorly named
441:bionic/libc/include/stdio.h **** * and likely to conflict with locally defined debugging printfs
442:bionic/libc/include/stdio.h **** * fdprintf is a better name, and some programs that use fdprintf use a
443:bionic/libc/include/stdio.h **** * #define fdprintf dprintf for compatibility
444:bionic/libc/include/stdio.h **** */
445:bionic/libc/include/stdio.h **** __BEGIN_DECLS
446:bionic/libc/include/stdio.h **** int fdprintf(int, const char*, ...)
447:bionic/libc/include/stdio.h **** __printflike(2, 3);
448:bionic/libc/include/stdio.h **** int vfdprintf(int, const char*, __va_list)
449:bionic/libc/include/stdio.h **** __printflike(2, 0);
450:bionic/libc/include/stdio.h **** __END_DECLS
451:bionic/libc/include/stdio.h **** #endif /* _GNU_SOURCE */
452:bionic/libc/include/stdio.h ****
453:bionic/libc/include/stdio.h **** #if defined(__BIONIC_FORTIFY)
454:bionic/libc/include/stdio.h ****
455:bionic/libc/include/stdio.h **** __BEGIN_DECLS
456:bionic/libc/include/stdio.h ****
457:bionic/libc/include/stdio.h **** __BIONIC_FORTIFY_INLINE
458:bionic/libc/include/stdio.h **** __printflike(3, 0)
459:bionic/libc/include/stdio.h **** int vsnprintf(char *dest, size_t size, const char *format, __va_list ap)
460:bionic/libc/include/stdio.h **** {
461:bionic/libc/include/stdio.h **** return __builtin___vsnprintf_chk(dest, size, 0, __bos(dest), format, ap);
462:bionic/libc/include/stdio.h **** }
463:bionic/libc/include/stdio.h ****
464:bionic/libc/include/stdio.h **** __BIONIC_FORTIFY_INLINE
465:bionic/libc/include/stdio.h **** __printflike(2, 0)
466:bionic/libc/include/stdio.h **** int vsprintf(char *dest, const char *format, __va_list ap)
467:bionic/libc/include/stdio.h **** {
468:bionic/libc/include/stdio.h **** return __builtin___vsprintf_chk(dest, 0, __bos(dest), format, ap);
469:bionic/libc/include/stdio.h **** }
470:bionic/libc/include/stdio.h ****
471:bionic/libc/include/stdio.h **** #if defined(__clang__)
472:bionic/libc/include/stdio.h **** #define snprintf(dest, size, ...) __builtin___snprintf_chk(dest, size, 0, __bos(dest), __VA_ARGS__)
473:bionic/libc/include/stdio.h **** #else
474:bionic/libc/include/stdio.h **** __BIONIC_FORTIFY_INLINE
475:bionic/libc/include/stdio.h **** __printflike(3, 4)
476:bionic/libc/include/stdio.h **** int snprintf(char *dest, size_t size, const char *format, ...)
477:bionic/libc/include/stdio.h **** {
478:bionic/libc/include/stdio.h **** return __builtin___snprintf_chk(dest, size, 0,
4453 .loc 4 478 0
4454 00ba 364A ldr r2, .L358+12
4455 00bc 0DF50050 add r0, sp, #8192
4456 00c0 4FF48051 mov r1, #4096
4457 00c4 1C30 adds r0, r0, #28
4458 00c6 3B46 mov r3, r7
4459 .LPIC38:
4460 00c8 7A44 add r2, pc
4461 00ca FFF7FEFF bl snprintf(PLT)
4462 .LVL499:
ARM GAS /tmp/cc3I8rcL.s page 135
4463 .LBE492:
4464 .LBE491:
1005:system/core/sdcard/sdcard.c **** if (touch(nomedia, 0664) != 0) {
4465 .loc 1 1005 0
4466 00ce 0DF50050 add r0, sp, #8192
4467 00d2 1C30 adds r0, r0, #28
4468 00d4 FFF7FEFF bl touch.constprop.26(PLT)
4469 .LVL500:
4470 00d8 60B1 cbz r0, .L341
1006:system/core/sdcard/sdcard.c **** ERROR("Failed to touch(%s): %s\n", nomedia, strerror(errno));
4471 .loc 1 1006 0
4472 00da FFF7FEFF bl __errno(PLT)
4473 .LVL501:
4474 00de 0068 ldr r0, [r0, #0]
4475 00e0 FFF7FEFF bl strerror(PLT)
4476 .LVL502:
4477 00e4 2C49 ldr r1, .L358+16
4478 00e6 0346 mov r3, r0
4479 00e8 59F80100 ldr r0, [r9, r1]
4480 00ec 2B49 ldr r1, .L358+20
4481 00ee A830 adds r0, r0, #168
4482 .LPIC39:
4483 00f0 7944 add r1, pc
4484 00f2 25E0 b .L356
4485 .LVL503:
4486 .L341:
4487 .LBE490:
1010:system/core/sdcard/sdcard.c **** if (parent_node->perm == PERM_ANDROID && !strcasecmp(name, "obb")) {
4488 .loc 1 1010 0
4489 00f4 B069 ldr r0, [r6, #24]
4490 00f6 0328 cmp r0, #3
4491 00f8 2AD1 bne .L343
4492 00fa 2949 ldr r1, .L358+24
4493 00fc 2846 mov r0, r5
4494 .LPIC40:
4495 00fe 7944 add r1, pc
4496 0100 FFF7FEFF bl strcasecmp(PLT)
4497 .LVL504:
4498 0104 20BB cbnz r0, .L343
4499 .LVL505:
4500 .LBB493:
4501 .LBB494:
4502 .LBB495:
4503 .loc 4 478 0
4504 0106 274A ldr r2, .L358+28
4505 0108 0DF50050 add r0, sp, #8192
4506 010c 4FF48051 mov r1, #4096
4507 0110 1C30 adds r0, r0, #28
4508 0112 04F17003 add r3, r4, #112
4509 .LPIC41:
4510 0116 7A44 add r2, pc
4511 0118 FFF7FEFF bl snprintf(PLT)
4512 .LVL506:
4513 .LBE495:
4514 .LBE494:
1013:system/core/sdcard/sdcard.c **** if (touch(nomedia, 0664) != 0) {
4515 .loc 1 1013 0
ARM GAS /tmp/cc3I8rcL.s page 136
4516 011c 0DF50050 add r0, sp, #8192
4517 0120 1C30 adds r0, r0, #28
4518 0122 FFF7FEFF bl touch.constprop.26(PLT)
4519 .LVL507:
4520 0126 98B1 cbz r0, .L343
1014:system/core/sdcard/sdcard.c **** ERROR("Failed to touch(%s): %s\n", nomedia, strerror(errno));
4521 .loc 1 1014 0
4522 0128 FFF7FEFF bl __errno(PLT)
4523 .LVL508:
4524 012c 0068 ldr r0, [r0, #0]
4525 012e FFF7FEFF bl strerror(PLT)
4526 .LVL509:
4527 0132 194A ldr r2, .L358+16
4528 0134 0346 mov r3, r0
4529 0136 1C49 ldr r1, .L358+32
4530 0138 59F80200 ldr r0, [r9, r2]
4531 .LPIC42:
4532 013c 7944 add r1, pc
4533 013e A830 adds r0, r0, #168
4534 .LVL510:
4535 .L356:
4536 0140 0DF50052 add r2, sp, #8192
4537 0144 1C32 adds r2, r2, #28
4538 0146 FFF7FEFF bl fprintf(PLT)
4539 .LVL511:
4540 .L357:
1015:system/core/sdcard/sdcard.c **** return -ENOENT;
4541 .loc 1 1015 0
4542 014a 6FF00100 mvn r0, #1
4543 014e 0CE0 b .L338
4544 .LVL512:
4545 .L343:
4546 .LBE493:
1019:system/core/sdcard/sdcard.c **** return fuse_reply_entry(fuse, hdr->unique, parent_node, name, actual_name, child_path);
4547 .loc 1 1019 0
4548 0150 D8E90223 ldrd r2, [r8, #8]
4549 0154 0096 str r6, [sp, #0]
4550 0156 2046 mov r0, r4
4551 0158 0195 str r5, [sp, #4]
4552 015a CDF808A0 str sl, [sp, #8]
4553 015e 0397 str r7, [sp, #12]
4554 0160 FFF7FEFF bl fuse_reply_entry(PLT)
4555 .LVL513:
4556 0164 01E0 b .L338
4557 .L346:
994:system/core/sdcard/sdcard.c **** return -EACCES;
4558 .loc 1 994 0
4559 0166 6FF00C00 mvn r0, #12
4560 .LVL514:
4561 .L338:
1020:system/core/sdcard/sdcard.c **** }
4562 .loc 1 1020 0
4563 016a 0599 ldr r1, [sp, #20]
4564 016c 0DF54052 add r2, sp, #12288
4565 0170 1C32 adds r2, r2, #28
4566 0172 1268 ldr r2, [r2, #0]
4567 0174 0B68 ldr r3, [r1, #0]
ARM GAS /tmp/cc3I8rcL.s page 137
4568 0176 9A42 cmp r2, r3
4569 0178 01D0 beq .L345
4570 017a FFF7FEFF bl __stack_chk_fail(PLT)
4571 .LVL515:
4572 .L345:
4573 017e 09B0 add sp, sp, #36
4574 0180 0DF5405D add sp, sp, #12288
4575 0184 BDE8F08F pop {r4, r5, r6, r7, r8, r9, sl, fp, pc}
4576 .L359:
4577 .align 2
4578 .L358:
4579 0188 62010000 .word _GLOBAL_OFFSET_TABLE_-(.LPIC36+4)
4580 018c 00000000 .word __stack_chk_guard(GOT)
4581 0190 DA000000 .word .LC17-(.LPIC37+4)
4582 0194 C8000000 .word .LC20-(.LPIC38+4)
4583 0198 00000000 .word __sF(GOT)
4584 019c A8000000 .word .LC21-(.LPIC39+4)
4585 01a0 9E000000 .word .LC18-(.LPIC40+4)
4586 01a4 8A000000 .word .LC20-(.LPIC41+4)
4587 01a8 68000000 .word .LC21-(.LPIC42+4)
4588 .cfi_endproc
4589 .LFE145:
4590 .fnend
4592 .section .text.handle_fuse_requests,"ax",%progbits
4593 .align 1
4594 .thumb
4595 .thumb_func
4597 handle_fuse_requests:
4598 .fnstart
4599 .LFB111:
1551:system/core/sdcard/sdcard.c **** {
4600 .loc 1 1551 0
4601 .cfi_startproc
4602 @ args = 0, pretend = 0, frame = 32
4603 @ frame_needed = 0, uses_anonymous_args = 0
4604 .LVL516:
4605 0000 2DE9F04F push {r4, r5, r6, r7, r8, r9, sl, fp, lr}
4606 .save {r4, r5, r6, r7, r8, r9, sl, fp, lr}
4607 .LCFI55:
4608 .cfi_def_cfa_offset 36
4609 .cfi_offset 4, -36
4610 .cfi_offset 5, -32
4611 .cfi_offset 6, -28
4612 .cfi_offset 7, -24
4613 .cfi_offset 8, -20
4614 .cfi_offset 9, -16
4615 .cfi_offset 10, -12
4616 .cfi_offset 11, -8
4617 .cfi_offset 14, -4
4618 0004 2DED028B fstmfdd sp!, {d8}
4619 .vsave {d8}
4620 .LCFI56:
4621 .cfi_def_cfa_offset 44
4622 .cfi_offset 80, -44
4623 0008 0646 mov r6, r0
4624 .LBB550:
1558:system/core/sdcard/sdcard.c **** ERROR("[%d] handle_fuse_requests: errno=%d\n", handler->token, errno);
ARM GAS /tmp/cc3I8rcL.s page 138
4625 .loc 1 1558 0
4626 000a DFF8A892 ldr r9, .L421+12
1570:system/core/sdcard/sdcard.c **** ERROR("[%d] malformed header: len=%zu, hdr->len=%u\n",
4627 .loc 1 1570 0
4628 000e DFF8A8A2 ldr sl, .L421+16
1564:system/core/sdcard/sdcard.c **** ERROR("[%d] request too short: len=%zu\n", handler->token, (size_t)len);
4629 .loc 1 1564 0
4630 0012 DFF8A8B2 ldr fp, .L421+20
4631 .LBE550:
1551:system/core/sdcard/sdcard.c **** {
4632 .loc 1 1551 0
4633 0016 DFF8A882 ldr r8, .L421+24
4634 .pad #44
4635 001a 8BB0 sub sp, sp, #44
4636 .LCFI57:
4637 .cfi_def_cfa_offset 88
1552:system/core/sdcard/sdcard.c **** struct fuse* fuse = handler->fuse;
4638 .loc 1 1552 0
4639 001c 0768 ldr r7, [r0, #0]
4640 .LVL517:
4641 .LBB606:
1558:system/core/sdcard/sdcard.c **** ERROR("[%d] handle_fuse_requests: errno=%d\n", handler->token, errno);
4642 .loc 1 1558 0
4643 .LPIC44:
4644 001e F944 add r9, pc
1570:system/core/sdcard/sdcard.c **** ERROR("[%d] malformed header: len=%zu, hdr->len=%u\n",
4645 .loc 1 1570 0
4646 .LPIC46:
4647 0020 FA44 add sl, pc
1564:system/core/sdcard/sdcard.c **** ERROR("[%d] request too short: len=%zu\n", handler->token, (size_t)len);
4648 .loc 1 1564 0
4649 .LPIC45:
4650 0022 FB44 add fp, pc
4651 .LBE606:
1551:system/core/sdcard/sdcard.c **** {
4652 .loc 1 1551 0
4653 .LPIC43:
4654 0024 F844 add r8, pc
4655 .LVL518:
4656 .L415:
4657 .LBB607:
1555:system/core/sdcard/sdcard.c **** handler->request_buffer, sizeof(handler->request_buffer));
4658 .loc 1 1555 0
4659 0026 06F10804 add r4, r6, #8
1554:system/core/sdcard/sdcard.c **** ssize_t len = read(fuse->fd,
4660 .loc 1 1554 0
4661 002a 3869 ldr r0, [r7, #16]
4662 002c 2146 mov r1, r4
4663 002e A04A ldr r2, .L421+8
4664 0030 FFF7FEFF bl read(PLT)
4665 .LVL519:
1556:system/core/sdcard/sdcard.c **** if (len < 0) {
4666 .loc 1 1556 0
4667 0034 031E subs r3, r0, #0
4668 0036 0BDA bge .L362
1557:system/core/sdcard/sdcard.c **** if (errno != EINTR) {
4669 .loc 1 1557 0
ARM GAS /tmp/cc3I8rcL.s page 139
4670 0038 FFF7FEFF bl __errno(PLT)
4671 .LVL520:
4672 003c 0268 ldr r2, [r0, #0]
4673 003e 042A cmp r2, #4
4674 0040 F1D0 beq .L415
1558:system/core/sdcard/sdcard.c **** ERROR("[%d] handle_fuse_requests: errno=%d\n", handler->token, errno);
4675 .loc 1 1558 0
4676 0042 A04D ldr r5, .L421+28
4677 0044 4946 mov r1, r9
4678 0046 0368 ldr r3, [r0, #0]
4679 0048 58F80500 ldr r0, [r8, r5]
4680 004c A830 adds r0, r0, #168
4681 004e 06E0 b .L416
4682 .LVL521:
4683 .L362:
1563:system/core/sdcard/sdcard.c **** if ((size_t)len < sizeof(struct fuse_in_header)) {
4684 .loc 1 1563 0
4685 0050 272B cmp r3, #39
4686 0052 08D8 bhi .L365
1564:system/core/sdcard/sdcard.c **** ERROR("[%d] request too short: len=%zu\n", handler->token, (size_t)len);
4687 .loc 1 1564 0
4688 0054 9B48 ldr r0, .L421+28
4689 .LVL522:
4690 0056 5946 mov r1, fp
4691 0058 58F80000 ldr r0, [r8, r0]
4692 005c A830 adds r0, r0, #168
4693 .LVL523:
4694 .L416:
4695 005e 7268 ldr r2, [r6, #4]
4696 0060 FFF7FEFF bl fprintf(PLT)
4697 .LVL524:
1565:system/core/sdcard/sdcard.c **** continue;
4698 .loc 1 1565 0
4699 0064 DFE7 b .L415
4700 .LVL525:
4701 .L365:
1569:system/core/sdcard/sdcard.c **** if (hdr->len != (size_t)len) {
4702 .loc 1 1569 0
4703 0066 B268 ldr r2, [r6, #8]
4704 0068 9A42 cmp r2, r3
4705 006a 09D0 beq .L366
1570:system/core/sdcard/sdcard.c **** ERROR("[%d] malformed header: len=%zu, hdr->len=%u\n",
4706 .loc 1 1570 0
4707 006c 954C ldr r4, .L421+28
4708 .LVL526:
4709 006e 5146 mov r1, sl
4710 0070 58F80400 ldr r0, [r8, r4]
4711 .LVL527:
4712 0074 0092 str r2, [sp, #0]
4713 0076 7268 ldr r2, [r6, #4]
4714 0078 A830 adds r0, r0, #168
4715 007a FFF7FEFF bl fprintf(PLT)
4716 .LVL528:
1572:system/core/sdcard/sdcard.c **** continue;
4717 .loc 1 1572 0
4718 007e D2E7 b .L415
4719 .LVL529:
ARM GAS /tmp/cc3I8rcL.s page 140
4720 .L366:
4721 .LBB551:
4722 .LBB552:
1430:system/core/sdcard/sdcard.c **** switch (hdr->opcode) {
4723 .loc 1 1430 0
4724 0080 F368 ldr r3, [r6, #12]
4725 .LBE552:
4726 .LBE551:
1575:system/core/sdcard/sdcard.c **** const void *data = handler->request_buffer + sizeof(struct fuse_in_header);
4727 .loc 1 1575 0
4728 0082 06F13002 add r2, r6, #48
4729 .LVL530:
1577:system/core/sdcard/sdcard.c **** __u64 unique = hdr->unique;
4730 .loc 1 1577 0
4731 0086 96ED048B fldd d8, [r6, #16] @ int
4732 .LVL531:
4733 .LBB601:
4734 .LBB598:
1430:system/core/sdcard/sdcard.c **** switch (hdr->opcode) {
4735 .loc 1 1430 0
4736 008a 591E subs r1, r3, #1
4737 008c 1C29 cmp r1, #28
4738 008e 00F20681 bhi .L403
4739 0092 DFE811F0 tbh [pc, r1, lsl #1]
4740 .LVL532:
4741 .L388:
4742 0096 1D00 .2byte (.L368-.L388)/2
4743 0098 2200 .2byte (.L369-.L388)/2
4744 009a 4700 .2byte (.L370-.L388)/2
4745 009c 4C00 .2byte (.L371-.L388)/2
4746 009e 0401 .2byte (.L403-.L388)/2
4747 00a0 0401 .2byte (.L403-.L388)/2
4748 00a2 0401 .2byte (.L403-.L388)/2
4749 00a4 5100 .2byte (.L372-.L388)/2
4750 00a6 5800 .2byte (.L373-.L388)/2
4751 00a8 5F00 .2byte (.L374-.L388)/2
4752 00aa 6400 .2byte (.L375-.L388)/2
4753 00ac 6900 .2byte (.L376-.L388)/2
4754 00ae 0401 .2byte (.L403-.L388)/2
4755 00b0 7900 .2byte (.L377-.L388)/2
4756 00b2 7E00 .2byte (.L378-.L388)/2
4757 00b4 9600 .2byte (.L379-.L388)/2
4758 00b6 AE00 .2byte (.L380-.L388)/2
4759 00b8 B300 .2byte (.L381-.L388)/2
4760 00ba 0401 .2byte (.L403-.L388)/2
4761 00bc B800 .2byte (.L382-.L388)/2
4762 00be 0401 .2byte (.L403-.L388)/2
4763 00c0 0401 .2byte (.L403-.L388)/2
4764 00c2 0401 .2byte (.L403-.L388)/2
4765 00c4 0401 .2byte (.L403-.L388)/2
4766 00c6 F800 .2byte (.L404-.L388)/2
4767 00c8 DB00 .2byte (.L384-.L388)/2
4768 00ca C900 .2byte (.L385-.L388)/2
4769 00cc CE00 .2byte (.L386-.L388)/2
4770 00ce D300 .2byte (.L387-.L388)/2
4771 .L368:
4772 .LVL533:
ARM GAS /tmp/cc3I8rcL.s page 141
4773 .LBB553:
1433:system/core/sdcard/sdcard.c **** return handle_lookup(fuse, handler, hdr, name);
4774 .loc 1 1433 0
4775 00d0 3846 mov r0, r7
4776 00d2 2146 mov r1, r4
4777 00d4 FFF7FEFF bl handle_lookup.isra.22(PLT)
4778 .LVL534:
4779 00d8 D2E0 b .L389
4780 .LVL535:
4781 .L369:
4782 .LBE553:
4783 .LBB554:
4784 .LBB555:
4785 .LBB556:
842:system/core/sdcard/sdcard.c **** pthread_mutex_lock(&fuse->lock);
4786 .loc 1 842 0
4787 00da 3846 mov r0, r7
4788 00dc FFF7FEFF bl pthread_mutex_lock(PLT)
4789 .LVL536:
843:system/core/sdcard/sdcard.c **** node = lookup_node_by_id_locked(fuse, hdr->nodeid);
4790 .loc 1 843 0
4791 00e0 D6E90623 ldrd r2, [r6, #24]
4792 .LVL537:
4793 .LBB557:
4794 .LBB558:
640:system/core/sdcard/sdcard.c **** if (nid == FUSE_ROOT_ID) {
4795 .loc 1 640 0
4796 00e4 002B cmp r3, #0
4797 00e6 08BF it eq
4798 00e8 012A cmpeq r2, #1
4799 00ea 02D1 bne .L390
641:system/core/sdcard/sdcard.c **** return &fuse->root;
4800 .loc 1 641 0
4801 00ec 07F12003 add r3, r7, #32
4802 00f0 05E0 b .L391
4803 .L390:
4804 .LBE558:
4805 .LBE557:
846:system/core/sdcard/sdcard.c **** if (node) {
4806 .loc 1 846 0
4807 00f2 1346 mov r3, r2
4808 00f4 1AB9 cbnz r2, .L391
4809 .LVL538:
4810 .L395:
852:system/core/sdcard/sdcard.c **** pthread_mutex_unlock(&fuse->lock);
4811 .loc 1 852 0
4812 00f6 3846 mov r0, r7
4813 00f8 FFF7FEFF bl pthread_mutex_unlock(PLT)
4814 .LVL539:
4815 00fc 93E7 b .L415
4816 .LVL540:
4817 .L391:
4818 .LBB559:
847:system/core/sdcard/sdcard.c **** __u64 n = req->nlookup;
4819 .loc 1 847 0
4820 00fe D6E90C45 ldrd r4, [r6, #48]
4821 .LVL541:
ARM GAS /tmp/cc3I8rcL.s page 142
4822 0102 9FED698B fldd d8, .L421 @ int
4823 .LVL542:
4824 0106 09E0 b .L393
4825 .LVL543:
4826 .L394:
849:system/core/sdcard/sdcard.c **** release_node_locked(node);
4827 .loc 1 849 0
4828 0108 1846 mov r0, r3
4829 010a 0393 str r3, [sp, #12]
4830 010c FFF7FEFF bl release_node_locked(PLT)
4831 .LVL544:
4832 0110 51EC180B fmrrd r0, r1, d8 @ int
4833 0114 039B ldr r3, [sp, #12]
4834 0116 2418 adds r4, r4, r0
4835 0118 45EB0105 adc r5, r5, r1
4836 .L393:
848:system/core/sdcard/sdcard.c **** while (n--) {
4837 .loc 1 848 0
4838 011c 54EA0501 orrs r1, r4, r5
4839 0120 F2D1 bne .L394
4840 0122 E8E7 b .L395
4841 .LVL545:
4842 .L370:
4843 .LBE559:
4844 .LBE556:
4845 .LBE555:
4846 .LBE554:
4847 .LBB560:
1443:system/core/sdcard/sdcard.c **** return handle_getattr(fuse, handler, hdr, req);
4848 .loc 1 1443 0
4849 0124 3846 mov r0, r7
4850 0126 2146 mov r1, r4
4851 0128 FFF7FEFF bl handle_getattr.isra.5(PLT)
4852 .LVL546:
4853 012c A8E0 b .L389
4854 .LVL547:
4855 .L371:
4856 .LBE560:
4857 .LBB561:
1448:system/core/sdcard/sdcard.c **** return handle_setattr(fuse, handler, hdr, req);
4858 .loc 1 1448 0
4859 012e 3846 mov r0, r7
4860 0130 2146 mov r1, r4
4861 0132 FFF7FEFF bl handle_setattr.isra.13(PLT)
4862 .LVL548:
4863 0136 A3E0 b .L389
4864 .LVL549:
4865 .L372:
4866 .LBE561:
4867 .LBB562:
1456:system/core/sdcard/sdcard.c **** return handle_mknod(fuse, handler, hdr, req, name);
4868 .loc 1 1456 0
4869 0138 3846 mov r0, r7
4870 013a 2146 mov r1, r4
4871 013c 06F14003 add r3, r6, #64
4872 .LVL550:
4873 0140 FFF7FEFF bl handle_mknod.isra.23(PLT)
ARM GAS /tmp/cc3I8rcL.s page 143
4874 .LVL551:
4875 0144 9CE0 b .L389
4876 .LVL552:
4877 .L373:
4878 .LBE562:
4879 .LBB563:
1462:system/core/sdcard/sdcard.c **** return handle_mkdir(fuse, handler, hdr, req, name);
4880 .loc 1 1462 0
4881 0146 3846 mov r0, r7
4882 0148 2146 mov r1, r4
4883 014a 06F13803 add r3, r6, #56
4884 .LVL553:
4885 014e FFF7FEFF bl handle_mkdir.isra.24(PLT)
4886 .LVL554:
4887 0152 95E0 b .L389
4888 .LVL555:
4889 .L374:
4890 .LBE563:
4891 .LBB564:
1467:system/core/sdcard/sdcard.c **** return handle_unlink(fuse, handler, hdr, name);
4892 .loc 1 1467 0
4893 0154 3846 mov r0, r7
4894 0156 2146 mov r1, r4
4895 0158 FFF7FEFF bl handle_unlink.isra.15(PLT)
4896 .LVL556:
4897 015c 90E0 b .L389
4898 .LVL557:
4899 .L375:
4900 .LBE564:
4901 .LBB565:
1472:system/core/sdcard/sdcard.c **** return handle_rmdir(fuse, handler, hdr, name);
4902 .loc 1 1472 0
4903 015e 3846 mov r0, r7
4904 0160 2146 mov r1, r4
4905 0162 FFF7FEFF bl handle_rmdir.isra.16(PLT)
4906 .LVL558:
4907 0166 8BE0 b .L389
4908 .LVL559:
4909 .L376:
4910 .LBE565:
4911 .LBB566:
1477:system/core/sdcard/sdcard.c **** const char *old_name = ((const char*) data) + sizeof(*req);
4912 .loc 1 1477 0
4913 0168 06F13805 add r5, r6, #56
4914 .LVL560:
4915 .LBB567:
4916 .LBB568:
217:bionic/libc/include/string.h **** return __builtin_strlen(s);
4917 .loc 2 217 0
4918 016c 0392 str r2, [sp, #12]
4919 016e 2846 mov r0, r5
4920 0170 FFF7FEFF bl strlen(PLT)
4921 .LVL561:
4922 .LBE568:
4923 .LBE567:
1478:system/core/sdcard/sdcard.c **** const char *new_name = old_name + strlen(old_name) + 1;
4924 .loc 1 1478 0
ARM GAS /tmp/cc3I8rcL.s page 144
4925 0174 411C adds r1, r0, #1
1479:system/core/sdcard/sdcard.c **** return handle_rename(fuse, handler, hdr, req, old_name, new_name);
4926 .loc 1 1479 0
4927 0176 039A ldr r2, [sp, #12]
4928 0178 3846 mov r0, r7
4929 .LVL562:
1478:system/core/sdcard/sdcard.c **** const char *new_name = old_name + strlen(old_name) + 1;
4930 .loc 1 1478 0
4931 017a 6B18 adds r3, r5, r1
1479:system/core/sdcard/sdcard.c **** return handle_rename(fuse, handler, hdr, req, old_name, new_name);
4932 .loc 1 1479 0
4933 017c 2146 mov r1, r4
4934 .LVL563:
4935 017e 0093 str r3, [sp, #0]
4936 0180 2B46 mov r3, r5
4937 0182 FFF7FEFF bl handle_rename.isra.17(PLT)
4938 .LVL564:
4939 0186 7BE0 b .L389
4940 .LVL565:
4941 .L377:
4942 .LBE566:
4943 .LBB569:
1485:system/core/sdcard/sdcard.c **** return handle_open(fuse, handler, hdr, req);
4944 .loc 1 1485 0
4945 0188 3846 mov r0, r7
4946 018a 2146 mov r1, r4
4947 018c FFF7FEFF bl handle_open.isra.14(PLT)
4948 .LVL566:
4949 0190 76E0 b .L389
4950 .LVL567:
4951 .L378:
4952 .LBE569:
4953 .LBB570:
4954 .LBB571:
4955 .LBB572:
1218:system/core/sdcard/sdcard.c **** __u32 size = req->size;
4956 .loc 1 1218 0
4957 0192 326C ldr r2, [r6, #64]
4958 .LVL568:
4959 .LBB573:
4960 .LBB574:
241:system/core/sdcard/sdcard.c **** return (void *) (uintptr_t) nid;
4961 .loc 1 241 0
4962 0194 336B ldr r3, [r6, #48]
4963 .LVL569:
4964 .LBE574:
4965 .LBE573:
1219:system/core/sdcard/sdcard.c **** __u64 offset = req->offset;
4966 .loc 1 1219 0
4967 0196 D6E90E01 ldrd r0, [r6, #56]
4968 .LVL570:
1228:system/core/sdcard/sdcard.c **** if (size > sizeof(handler->read_buffer)) {
4969 .loc 1 1228 0
4970 019a B2F5003F cmp r2, #131072
4971 019e 0DD8 bhi .L405
1231:system/core/sdcard/sdcard.c **** res = pread64(h->fd, handler->read_buffer, size, offset);
4972 .loc 1 1231 0
ARM GAS /tmp/cc3I8rcL.s page 145
4973 01a0 06F10805 add r5, r6, #8
4974 01a4 CDE90001 strd r0, [sp]
4975 01a8 1868 ldr r0, [r3, #0]
4976 .LVL571:
4977 01aa 2946 mov r1, r5
4978 01ac FFF7FEFF bl pread64(PLT)
4979 .LVL572:
1232:system/core/sdcard/sdcard.c **** if (res < 0) {
4980 .loc 1 1232 0
4981 01b0 0028 cmp r0, #0
4982 01b2 00DA bge .L397
4983 01b4 33E0 b .L419
4984 .L397:
1235:system/core/sdcard/sdcard.c **** fuse_reply(fuse, unique, handler->read_buffer, res);
4985 .loc 1 1235 0
4986 01b6 0095 str r5, [sp, #0]
4987 01b8 0190 str r0, [sp, #4]
4988 01ba 5BE0 b .L417
4989 .LVL573:
4990 .L405:
1229:system/core/sdcard/sdcard.c **** return -EINVAL;
4991 .loc 1 1229 0
4992 01bc 6FF01500 mvn r0, #21
4993 .LVL574:
4994 01c0 62E0 b .L383
4995 .LVL575:
4996 .L379:
4997 .LBE572:
4998 .LBE571:
4999 .LBE570:
5000 .LBB575:
5001 .LBB576:
5002 .LBB577:
1249:system/core/sdcard/sdcard.c **** res = pwrite64(h->fd, buffer, req->size, req->offset);
5003 .loc 1 1249 0
5004 01c2 D6E90E01 ldrd r0, [r6, #56]
5005 01c6 356B ldr r5, [r6, #48]
5006 01c8 326C ldr r2, [r6, #64]
5007 .LVL576:
5008 01ca CDE90001 strd r0, [sp]
5009 01ce 06F15801 add r1, r6, #88
5010 .LVL577:
5011 01d2 2868 ldr r0, [r5, #0]
5012 01d4 FFF7FEFF bl pwrite64(PLT)
5013 .LVL578:
1250:system/core/sdcard/sdcard.c **** if (res < 0) {
5014 .loc 1 1250 0
5015 01d8 0028 cmp r0, #0
5016 01da 00DA bge .L398
5017 01dc 1FE0 b .L419
5018 .L398:
1253:system/core/sdcard/sdcard.c **** out.size = res;
5019 .loc 1 1253 0
5020 01de 0AA9 add r1, sp, #40
1254:system/core/sdcard/sdcard.c **** fuse_reply(fuse, hdr->unique, &out, sizeof(out));
5021 .loc 1 1254 0
5022 01e0 0824 movs r4, #8
ARM GAS /tmp/cc3I8rcL.s page 146
5023 .LVL579:
5024 01e2 D6E90423 ldrd r2, [r6, #16]
1253:system/core/sdcard/sdcard.c **** out.size = res;
5025 .loc 1 1253 0
5026 01e6 41F8180D str r0, [r1, #-24]!
1254:system/core/sdcard/sdcard.c **** fuse_reply(fuse, hdr->unique, &out, sizeof(out));
5027 .loc 1 1254 0
5028 01ea 3846 mov r0, r7
5029 .LVL580:
5030 01ec 0091 str r1, [sp, #0]
5031 01ee 0194 str r4, [sp, #4]
5032 01f0 43E0 b .L418
5033 .LVL581:
5034 .L380:
5035 .LBE577:
5036 .LBE576:
5037 .LBE575:
1500:system/core/sdcard/sdcard.c **** return handle_statfs(fuse, handler, hdr);
5038 .loc 1 1500 0
5039 01f2 3846 mov r0, r7
5040 01f4 2146 mov r1, r4
5041 01f6 FFF7FEFF bl handle_statfs.isra.19(PLT)
5042 .LVL582:
5043 01fa 41E0 b .L389
5044 .LVL583:
5045 .L381:
5046 .LBB578:
5047 .LBB579:
5048 .LBB580:
5049 .LBB581:
5050 .LBB582:
241:system/core/sdcard/sdcard.c **** return (void *) (uintptr_t) nid;
5051 .loc 1 241 0
5052 01fc 356B ldr r5, [r6, #48]
5053 .LBE582:
5054 .LBE581:
1295:system/core/sdcard/sdcard.c **** close(h->fd);
5055 .loc 1 1295 0
5056 01fe 2868 ldr r0, [r5, #0]
5057 0200 FFF7FEFF bl close(PLT)
5058 .LVL584:
5059 0204 1EE0 b .L420
5060 .LVL585:
5061 .L382:
5062 .LBE580:
5063 .LBE579:
5064 .LBE578:
5065 .LBB583:
5066 .LBB584:
1303:system/core/sdcard/sdcard.c **** int is_data_sync = req->fsync_flags & 1;
5067 .loc 1 1303 0
5068 0206 B26B ldr r2, [r6, #56]
5069 .LVL586:
5070 .LBB585:
5071 .LBB586:
5072 .LBB587:
241:system/core/sdcard/sdcard.c **** return (void *) (uintptr_t) nid;
ARM GAS /tmp/cc3I8rcL.s page 147
5073 .loc 1 241 0
5074 0208 336B ldr r3, [r6, #48]
5075 .LBE587:
5076 .LBE586:
1309:system/core/sdcard/sdcard.c **** res = is_data_sync ? fdatasync(h->fd) : fsync(h->fd);
5077 .loc 1 1309 0
5078 020a D107 lsls r1, r2, #31
5079 020c 1868 ldr r0, [r3, #0]
5080 020e 02D5 bpl .L400
5081 0210 FFF7FEFF bl fdatasync(PLT)
5082 .LVL587:
5083 0214 01E0 b .L401
5084 .LVL588:
5085 .L400:
5086 0216 FFF7FEFF bl fsync(PLT)
5087 .LVL589:
5088 .L401:
1310:system/core/sdcard/sdcard.c **** if (res < 0) {
5089 .loc 1 1310 0
5090 021a 0028 cmp r0, #0
5091 021c 33DA bge .L404
5092 .LVL590:
5093 .L419:
1311:system/core/sdcard/sdcard.c **** return -errno;
5094 .loc 1 1311 0
5095 021e FFF7FEFF bl __errno(PLT)
5096 .LVL591:
5097 0222 0268 ldr r2, [r0, #0]
5098 0224 5042 negs r0, r2
5099 0226 2BE0 b .L389
5100 .LVL592:
5101 .L385:
5102 .LBE585:
5103 .LBE584:
5104 .LBE583:
5105 .LBB588:
1523:system/core/sdcard/sdcard.c **** return handle_opendir(fuse, handler, hdr, req);
5106 .loc 1 1523 0
5107 0228 3846 mov r0, r7
5108 022a 2146 mov r1, r4
5109 022c FFF7FEFF bl handle_opendir.isra.10(PLT)
5110 .LVL593:
5111 0230 26E0 b .L389
5112 .LVL594:
5113 .L386:
5114 .LBE588:
5115 .LBB589:
1528:system/core/sdcard/sdcard.c **** return handle_readdir(fuse, handler, hdr, req);
5116 .loc 1 1528 0
5117 0232 3846 mov r0, r7
5118 0234 2146 mov r1, r4
5119 0236 FFF7FEFF bl handle_readdir.isra.21(PLT)
5120 .LVL595:
5121 023a 21E0 b .L389
5122 .LVL596:
5123 .L387:
5124 .LBE589:
ARM GAS /tmp/cc3I8rcL.s page 148
5125 .LBB590:
5126 .LBB591:
5127 .LBB592:
5128 .LBB593:
5129 .LBB594:
241:system/core/sdcard/sdcard.c **** return (void *) (uintptr_t) nid;
5130 .loc 1 241 0
5131 023c 356B ldr r5, [r6, #48]
5132 .LBE594:
5133 .LBE593:
1404:system/core/sdcard/sdcard.c **** closedir(h->d);
5134 .loc 1 1404 0
5135 023e 2868 ldr r0, [r5, #0]
5136 0240 FFF7FEFF bl closedir(PLT)
5137 .LVL597:
5138 .L420:
1405:system/core/sdcard/sdcard.c **** free(h);
5139 .loc 1 1405 0
5140 0244 2846 mov r0, r5
5141 0246 FFF7FEFF bl free(PLT)
5142 .LVL598:
5143 024a 1CE0 b .L404
5144 .LVL599:
5145 .L384:
5146 .LBE592:
5147 .LBE591:
5148 .LBE590:
5149 .LBB595:
5150 .LBB596:
5151 .LBB597:
1416:system/core/sdcard/sdcard.c **** out.major = FUSE_KERNEL_VERSION;
5152 .loc 1 1416 0
5153 024c 0720 movs r0, #7
1417:system/core/sdcard/sdcard.c **** out.minor = FUSE_KERNEL_MINOR_VERSION;
5154 .loc 1 1417 0
5155 024e 0D24 movs r4, #13
5156 .LVL600:
1418:system/core/sdcard/sdcard.c **** out.max_readahead = req->max_readahead;
5157 .loc 1 1418 0
5158 0250 B26B ldr r2, [r6, #56]
5159 .LVL601:
1420:system/core/sdcard/sdcard.c **** out.max_background = 32;
5160 .loc 1 1420 0
5161 0252 2021 movs r1, #32
1419:system/core/sdcard/sdcard.c **** out.flags = FUSE_ATOMIC_O_TRUNC | FUSE_BIG_WRITES;
5162 .loc 1 1419 0
5163 0254 2823 movs r3, #40
1416:system/core/sdcard/sdcard.c **** out.major = FUSE_KERNEL_VERSION;
5164 .loc 1 1416 0
5165 0256 0490 str r0, [sp, #16]
1422:system/core/sdcard/sdcard.c **** out.max_write = MAX_WRITE;
5166 .loc 1 1422 0
5167 0258 4FF48025 mov r5, #262144
1423:system/core/sdcard/sdcard.c **** fuse_reply(fuse, hdr->unique, &out, sizeof(out));
5168 .loc 1 1423 0
5169 025c 04A8 add r0, sp, #16
1417:system/core/sdcard/sdcard.c **** out.minor = FUSE_KERNEL_MINOR_VERSION;
ARM GAS /tmp/cc3I8rcL.s page 149
5170 .loc 1 1417 0
5171 025e 0594 str r4, [sp, #20]
1423:system/core/sdcard/sdcard.c **** fuse_reply(fuse, hdr->unique, &out, sizeof(out));
5172 .loc 1 1423 0
5173 0260 1824 movs r4, #24
1418:system/core/sdcard/sdcard.c **** out.max_readahead = req->max_readahead;
5174 .loc 1 1418 0
5175 0262 0692 str r2, [sp, #24]
1419:system/core/sdcard/sdcard.c **** out.flags = FUSE_ATOMIC_O_TRUNC | FUSE_BIG_WRITES;
5176 .loc 1 1419 0
5177 0264 0793 str r3, [sp, #28]
1420:system/core/sdcard/sdcard.c **** out.max_background = 32;
5178 .loc 1 1420 0
5179 0266 ADF82010 strh r1, [sp, #32] @ movhi
1421:system/core/sdcard/sdcard.c **** out.congestion_threshold = 32;
5180 .loc 1 1421 0
5181 026a ADF82210 strh r1, [sp, #34] @ movhi
1422:system/core/sdcard/sdcard.c **** out.max_write = MAX_WRITE;
5182 .loc 1 1422 0
5183 026e 0995 str r5, [sp, #36]
1423:system/core/sdcard/sdcard.c **** fuse_reply(fuse, hdr->unique, &out, sizeof(out));
5184 .loc 1 1423 0
5185 0270 0090 str r0, [sp, #0]
5186 0272 0194 str r4, [sp, #4]
5187 .LVL602:
5188 .L417:
5189 0274 53EC182B fmrrd r2, r3, d8 @ int
5190 0278 3846 mov r0, r7
5191 .LVL603:
5192 .L418:
5193 027a FFF7FEFF bl fuse_reply(PLT)
5194 .LVL604:
5195 027e D2E6 b .L415
5196 .LVL605:
5197 .L389:
5198 .LBE597:
5199 .LBE596:
5200 .LBE595:
5201 .LBE598:
5202 .LBE601:
1583:system/core/sdcard/sdcard.c **** if (res != NO_STATUS) {
5203 .loc 1 1583 0
5204 0280 0128 cmp r0, #1
5205 0282 01D1 bne .L383
5206 0284 CFE6 b .L415
5207 .L404:
5208 .LBB602:
5209 .LBB599:
1518:system/core/sdcard/sdcard.c **** return handle_flush(fuse, handler, hdr);
5210 .loc 1 1518 0
5211 0286 0020 movs r0, #0
5212 .L383:
5213 .LVL606:
5214 .LBE599:
5215 .LBE602:
5216 .LBB603:
5217 .LBB604:
ARM GAS /tmp/cc3I8rcL.s page 150
739:system/core/sdcard/sdcard.c **** hdr.len = sizeof(hdr);
5218 .loc 1 739 0
5219 0288 1022 movs r2, #16
740:system/core/sdcard/sdcard.c **** hdr.error = err;
5220 .loc 1 740 0
5221 028a 0590 str r0, [sp, #20]
741:system/core/sdcard/sdcard.c **** hdr.unique = unique;
5222 .loc 1 741 0
5223 028c 8DED068B fstd d8, [sp, #24] @ int
742:system/core/sdcard/sdcard.c **** write(fuse->fd, &hdr, sizeof(hdr));
5224 .loc 1 742 0
5225 0290 0DEB0201 add r1, sp, r2
739:system/core/sdcard/sdcard.c **** hdr.len = sizeof(hdr);
5226 .loc 1 739 0
5227 0294 0492 str r2, [sp, #16]
742:system/core/sdcard/sdcard.c **** write(fuse->fd, &hdr, sizeof(hdr));
5228 .loc 1 742 0
5229 0296 3869 ldr r0, [r7, #16]
5230 .LVL607:
5231 0298 FFF7FEFF bl write(PLT)
5232 .LVL608:
5233 029c C3E6 b .L415
5234 .LVL609:
5235 .L403:
5236 .LBE604:
5237 .LBE603:
5238 .LBB605:
5239 .LBB600:
1545:system/core/sdcard/sdcard.c **** return -ENOSYS;
5240 .loc 1 1545 0
5241 029e 6FF02500 mvn r0, #37
5242 02a2 F1E7 b .L383
5243 .L422:
5244 02a4 AFF30080 .align 3
5245 .L421:
5246 02a8 FFFFFFFF .word -1
5247 02ac FFFFFFFF .word -1
5248 02b0 50000400 .word 262224
5249 02b4 92020000 .word .LC22-(.LPIC44+4)
5250 02b8 94020000 .word .LC24-(.LPIC46+4)
5251 02bc 96020000 .word .LC23-(.LPIC45+4)
5252 02c0 98020000 .word _GLOBAL_OFFSET_TABLE_-(.LPIC43+4)
5253 02c4 00000000 .word __sF(GOT)
5254 .LBE600:
5255 .LBE605:
5256 .LBE607:
5257 .cfi_endproc
5258 .LFE111:
5259 .fnend
5261 .section .text.run,"ax",%progbits
5262 .align 1
5263 .thumb
5264 .thumb_func
5266 run:
5267 .fnstart
5268 .LFB119:
1771:system/core/sdcard/sdcard.c ****
ARM GAS /tmp/cc3I8rcL.s page 151
1772:system/core/sdcard/sdcard.c **** static int run(const char* source_path, const char* dest_path, uid_t uid,
1773:system/core/sdcard/sdcard.c **** gid_t gid, gid_t write_gid, int num_threads, derive_t derive,
1774:system/core/sdcard/sdcard.c **** bool split_perms) {
5269 .loc 1 1774 0
5270 .cfi_startproc
5271 @ args = 16, pretend = 0, frame = 6544
5272 @ frame_needed = 0, uses_anonymous_args = 0
5273 .LVL610:
5274 0000 2DE9F04F push {r4, r5, r6, r7, r8, r9, sl, fp, lr}
5275 .save {r4, r5, r6, r7, r8, r9, sl, fp, lr}
5276 .LCFI58:
5277 .cfi_def_cfa_offset 36
5278 .cfi_offset 4, -36
5279 .cfi_offset 5, -32
5280 .cfi_offset 6, -28
5281 .cfi_offset 7, -24
5282 .cfi_offset 8, -20
5283 .cfi_offset 9, -16
5284 .cfi_offset 10, -12
5285 .cfi_offset 11, -8
5286 .cfi_offset 14, -4
5287 0004 9946 mov r9, r3
5288 0006 DFF83045 ldr r4, .L481+4
5289 .pad #6528
5290 000a ADF5CC5D sub sp, sp, #6528
5291 .LCFI59:
5292 .cfi_def_cfa_offset 6564
5293 000e 1746 mov r7, r2
5294 0010 DFF82835 ldr r3, .L481+8
5295 .LVL611:
5296 .pad #28
5297 0014 87B0 sub sp, sp, #28
5298 .LCFI60:
5299 .cfi_def_cfa_offset 6592
5300 .loc 1 1774 0
5301 0016 8A46 mov sl, r1
5302 .LBB638:
5303 .LBB639:
5304 .loc 3 75 0
5305 0018 DFF824B5 ldr fp, .L481+12
5306 .LBE639:
5307 .LBE638:
5308 .loc 1 1774 0
5309 001c 0DF5CC51 add r1, sp, #6528
5310 .LVL612:
5311 0020 0646 mov r6, r0
5312 0022 1431 adds r1, r1, #20
5313 0024 0DF5CE50 add r0, sp, #6592
5314 .LVL613:
5315 .LPIC55:
5316 0028 7C44 add r4, pc
5317 002a 0830 adds r0, r0, #8
5318 002c 54F80380 ldr r8, [r4, r3]
5319 0030 0568 ldr r5, [r0, #0]
5320 .LBB642:
5321 .LBB640:
5322 .loc 3 75 0
ARM GAS /tmp/cc3I8rcL.s page 152
5323 .LPIC56:
5324 0032 FB44 add fp, pc
5325 .LBE640:
5326 .LBE642:
1775:system/core/sdcard/sdcard.c **** int fd;
1776:system/core/sdcard/sdcard.c **** char opts[256];
1777:system/core/sdcard/sdcard.c **** int res;
1778:system/core/sdcard/sdcard.c **** struct fuse fuse;
1779:system/core/sdcard/sdcard.c ****
1780:system/core/sdcard/sdcard.c **** /* cleanup from previous instance, if necessary */
1781:system/core/sdcard/sdcard.c **** umount2(dest_path, 2);
5327 .loc 1 1781 0
5328 0034 5046 mov r0, sl
1774:system/core/sdcard/sdcard.c **** bool split_perms) {
5329 .loc 1 1774 0
5330 0036 D8F80020 ldr r2, [r8, #0]
5331 .LVL614:
5332 003a 0A60 str r2, [r1, #0]
5333 .loc 1 1781 0
5334 003c 0221 movs r1, #2
5335 003e FFF7FEFF bl umount2(PLT)
5336 .LVL615:
5337 .LBB643:
5338 .LBB641:
5339 .loc 3 75 0
5340 0042 0221 movs r1, #2
5341 0044 5846 mov r0, fp
5342 0046 FFF7FEFF bl open(PLT)
5343 .LVL616:
5344 .LBE641:
5345 .LBE643:
1782:system/core/sdcard/sdcard.c ****
1783:system/core/sdcard/sdcard.c **** fd = open("/dev/fuse", O_RDWR);
1784:system/core/sdcard/sdcard.c **** if (fd < 0){
5346 .loc 1 1784 0
5347 004a 0028 cmp r0, #0
5348 004c CDF80C80 str r8, [sp, #12]
5349 0050 0290 str r0, [sp, #8]
5350 0052 12DA bge .L424
1785:system/core/sdcard/sdcard.c **** ERROR("cannot open fuse device: %s\n", strerror(errno));
5351 .loc 1 1785 0
5352 0054 DFF8ECA4 ldr sl, .L481+16
5353 .LVL617:
5354 0058 FFF7FEFF bl __errno(PLT)
5355 .LVL618:
5356 005c 0068 ldr r0, [r0, #0]
5357 005e FFF7FEFF bl strerror(PLT)
5358 .LVL619:
5359 0062 0246 mov r2, r0
5360 0064 DFF8E014 ldr r1, .L481+20
5361 0068 54F80A00 ldr r0, [r4, sl]
1786:system/core/sdcard/sdcard.c **** return -1;
5362 .loc 1 1786 0
5363 006c 4FF0FF3A mov sl, #-1
1785:system/core/sdcard/sdcard.c **** ERROR("cannot open fuse device: %s\n", strerror(errno));
5364 .loc 1 1785 0
5365 .LPIC57:
ARM GAS /tmp/cc3I8rcL.s page 153
5366 0070 7944 add r1, pc
5367 0072 A830 adds r0, r0, #168
5368 0074 FFF7FEFF bl fprintf(PLT)
5369 .LVL620:
5370 0078 4CE2 b .L425
5371 .LVL621:
5372 .L424:
5373 .LBB644:
5374 .LBB645:
5375 .loc 4 478 0
5376 007a DFF8D024 ldr r2, .L481+24
1787:system/core/sdcard/sdcard.c **** }
1788:system/core/sdcard/sdcard.c ****
1789:system/core/sdcard/sdcard.c **** snprintf(opts, sizeof(opts),
5377 .loc 1 1789 0
5378 007e 0DF11808 add r8, sp, #24
5379 .LVL622:
5380 .loc 4 478 0
5381 0082 4FF48071 mov r1, #256
5382 0086 029B ldr r3, [sp, #8]
5383 0088 8DE88002 stmia sp, {r7, r9}
5384 008c 4046 mov r0, r8
5385 .LPIC58:
5386 008e 7A44 add r2, pc
5387 0090 FFF7FEFF bl snprintf(PLT)
5388 .LVL623:
5389 .LBE645:
5390 .LBE644:
1790:system/core/sdcard/sdcard.c **** "fd=%i,rootmode=40000,default_permissions,allow_other,user_id=%d,group_id=%d",
1791:system/core/sdcard/sdcard.c **** fd, uid, gid);
1792:system/core/sdcard/sdcard.c ****
1793:system/core/sdcard/sdcard.c **** res = mount("/dev/fuse", dest_path, "fuse", MS_NOSUID | MS_NODEV, opts);
5391 .loc 1 1793 0
5392 0094 DFF8B824 ldr r2, .L481+28
5393 0098 5146 mov r1, sl
5394 009a 0623 movs r3, #6
5395 009c CDF80080 str r8, [sp, #0]
5396 00a0 5846 mov r0, fp
5397 .LPIC60:
5398 00a2 7A44 add r2, pc
5399 00a4 FFF7FEFF bl mount(PLT)
5400 .LVL624:
1794:system/core/sdcard/sdcard.c **** if (res < 0) {
5401 .loc 1 1794 0
5402 00a8 B0F1000A subs sl, r0, #0
5403 .LVL625:
5404 00ac 0DDA bge .L426
1795:system/core/sdcard/sdcard.c **** ERROR("cannot mount fuse filesystem: %s\n", strerror(errno));
5405 .loc 1 1795 0
5406 00ae FFF7FEFF bl __errno(PLT)
5407 .LVL626:
5408 00b2 0068 ldr r0, [r0, #0]
5409 00b4 FFF7FEFF bl strerror(PLT)
5410 .LVL627:
5411 00b8 DFF88814 ldr r1, .L481+16
5412 00bc 0246 mov r2, r0
5413 00be 6058 ldr r0, [r4, r1]
ARM GAS /tmp/cc3I8rcL.s page 154
5414 00c0 DFF89014 ldr r1, .L481+32
5415 00c4 A830 adds r0, r0, #168
5416 .LPIC61:
5417 00c6 7944 add r1, pc
5418 00c8 3EE0 b .L480
5419 .LVL628:
5420 .L426:
1796:system/core/sdcard/sdcard.c **** goto error;
1797:system/core/sdcard/sdcard.c **** }
1798:system/core/sdcard/sdcard.c ****
1799:system/core/sdcard/sdcard.c **** res = setgroups(sizeof(kGroups) / sizeof(kGroups[0]), kGroups);
5421 .loc 1 1799 0
5422 00ca DFF88C14 ldr r1, .L481+36
5423 00ce 0120 movs r0, #1
5424 .LVL629:
5425 .LPIC62:
5426 00d0 7944 add r1, pc
5427 00d2 FFF7FEFF bl setgroups(PLT)
5428 .LVL630:
1800:system/core/sdcard/sdcard.c **** if (res < 0) {
5429 .loc 1 1800 0
5430 00d6 B0F1000A subs sl, r0, #0
5431 00da 0DDA bge .L428
1801:system/core/sdcard/sdcard.c **** ERROR("cannot setgroups: %s\n", strerror(errno));
5432 .loc 1 1801 0
5433 00dc FFF7FEFF bl __errno(PLT)
5434 .LVL631:
5435 00e0 0068 ldr r0, [r0, #0]
5436 00e2 FFF7FEFF bl strerror(PLT)
5437 .LVL632:
5438 00e6 0246 mov r2, r0
5439 00e8 DFF85804 ldr r0, .L481+16
5440 00ec DFF86C14 ldr r1, .L481+40
5441 00f0 2058 ldr r0, [r4, r0]
5442 .LPIC63:
5443 00f2 7944 add r1, pc
5444 00f4 A830 adds r0, r0, #168
5445 00f6 27E0 b .L480
5446 .LVL633:
5447 .L428:
1802:system/core/sdcard/sdcard.c **** goto error;
1803:system/core/sdcard/sdcard.c **** }
1804:system/core/sdcard/sdcard.c ****
1805:system/core/sdcard/sdcard.c **** res = setgid(gid);
5448 .loc 1 1805 0
5449 00f8 4846 mov r0, r9
5450 .LVL634:
5451 00fa FFF7FEFF bl setgid(PLT)
5452 .LVL635:
1806:system/core/sdcard/sdcard.c **** if (res < 0) {
5453 .loc 1 1806 0
5454 00fe B0F1000A subs sl, r0, #0
5455 0102 0DDA bge .L429
1807:system/core/sdcard/sdcard.c **** ERROR("cannot setgid: %s\n", strerror(errno));
5456 .loc 1 1807 0
5457 0104 FFF7FEFF bl __errno(PLT)
5458 .LVL636:
ARM GAS /tmp/cc3I8rcL.s page 155
5459 0108 0068 ldr r0, [r0, #0]
5460 010a FFF7FEFF bl strerror(PLT)
5461 .LVL637:
5462 010e DFF83434 ldr r3, .L481+16
5463 0112 0246 mov r2, r0
5464 0114 DFF84814 ldr r1, .L481+44
5465 0118 E058 ldr r0, [r4, r3]
5466 .LPIC64:
5467 011a 7944 add r1, pc
5468 011c A830 adds r0, r0, #168
5469 011e 13E0 b .L480
5470 .LVL638:
5471 .L429:
1808:system/core/sdcard/sdcard.c **** goto error;
1809:system/core/sdcard/sdcard.c **** }
1810:system/core/sdcard/sdcard.c ****
1811:system/core/sdcard/sdcard.c **** res = setuid(uid);
5472 .loc 1 1811 0
5473 0120 3846 mov r0, r7
5474 .LVL639:
5475 0122 FFF7FEFF bl setuid(PLT)
5476 .LVL640:
1812:system/core/sdcard/sdcard.c **** if (res < 0) {
5477 .loc 1 1812 0
5478 0126 B0F1000A subs sl, r0, #0
5479 012a 10DA bge .L430
1813:system/core/sdcard/sdcard.c **** ERROR("cannot setuid: %s\n", strerror(errno));
5480 .loc 1 1813 0
5481 012c FFF7FEFF bl __errno(PLT)
5482 .LVL641:
5483 0130 0068 ldr r0, [r0, #0]
5484 0132 FFF7FEFF bl strerror(PLT)
5485 .LVL642:
5486 0136 DFF80CC4 ldr ip, .L481+16
5487 013a 0246 mov r2, r0
5488 013c DFF82414 ldr r1, .L481+48
5489 0140 54F80C00 ldr r0, [r4, ip]
5490 .LPIC65:
5491 0144 7944 add r1, pc
5492 0146 A830 adds r0, r0, #168
5493 .L480:
5494 0148 FFF7FEFF bl fprintf(PLT)
5495 .LVL643:
1814:system/core/sdcard/sdcard.c **** goto error;
5496 .loc 1 1814 0
5497 014c DFE1 b .L427
5498 .LVL644:
5499 .L430:
5500 .LBB646:
5501 .LBB647:
686:system/core/sdcard/sdcard.c **** pthread_mutex_init(&fuse->lock, NULL);
5502 .loc 1 686 0
5503 014e 0DF61817 addw r7, sp, #2328
5504 .LVL645:
5505 0152 0021 movs r1, #0
5506 0154 3846 mov r0, r7
5507 .LVL646:
ARM GAS /tmp/cc3I8rcL.s page 156
696:system/core/sdcard/sdcard.c **** fuse->root.refcount = 2;
5508 .loc 1 696 0
5509 0156 4FF00208 mov r8, #2
5510 .LVL647:
686:system/core/sdcard/sdcard.c **** pthread_mutex_init(&fuse->lock, NULL);
5511 .loc 1 686 0
5512 015a FFF7FEFF bl pthread_mutex_init(PLT)
5513 .LVL648:
688:system/core/sdcard/sdcard.c **** fuse->fd = fd;
5514 .loc 1 688 0
5515 015e 0298 ldr r0, [sp, #8]
689:system/core/sdcard/sdcard.c **** fuse->next_generation = 0;
5516 .loc 1 689 0
5517 0160 0021 movs r1, #0
691:system/core/sdcard/sdcard.c **** fuse->split_perms = split_perms;
5518 .loc 1 691 0
5519 0162 0DF5CE53 add r3, sp, #6592
5520 0166 0C33 adds r3, r3, #12
5521 .LVL649:
690:system/core/sdcard/sdcard.c **** fuse->derive = derive;
5522 .loc 1 690 0
5523 0168 7D61 str r5, [r7, #20]
691:system/core/sdcard/sdcard.c **** fuse->split_perms = split_perms;
5524 .loc 1 691 0
5525 016a 1A78 ldrb r2, [r3, #0] @ zero_extendqisi2
688:system/core/sdcard/sdcard.c **** fuse->fd = fd;
5526 .loc 1 688 0
5527 016c 3861 str r0, [r7, #16]
689:system/core/sdcard/sdcard.c **** fuse->next_generation = 0;
5528 .loc 1 689 0
5529 016e 0020 movs r0, #0
5530 0170 C7E90201 strd r0, [r7, #8]
692:system/core/sdcard/sdcard.c **** fuse->write_gid = write_gid;
5531 .loc 1 692 0
5532 0174 0DF5CE51 add r1, sp, #6592
5533 0178 0868 ldr r0, [r1, #0]
691:system/core/sdcard/sdcard.c **** fuse->split_perms = split_perms;
5534 .loc 1 691 0
5535 017a 3A76 strb r2, [r7, #24]
5536 .LBB648:
5537 .LBB649:
144:bionic/libc/include/string.h **** return __builtin___memset_chk(s, c, n, __builtin_object_size (s, 0));
5538 .loc 2 144 0
5539 017c 0021 movs r1, #0
5540 017e 5022 movs r2, #80
5541 .LBE649:
5542 .LBE648:
692:system/core/sdcard/sdcard.c **** fuse->write_gid = write_gid;
5543 .loc 1 692 0
5544 0180 F861 str r0, [r7, #28]
5545 .LVL650:
5546 .LBB651:
5547 .LBB650:
144:bionic/libc/include/string.h **** return __builtin___memset_chk(s, c, n, __builtin_object_size (s, 0));
5548 .loc 2 144 0
5549 0182 0DF63810 addw r0, sp, #2360
5550 .LVL651:
ARM GAS /tmp/cc3I8rcL.s page 157
5551 0186 FFF7FEFF bl memset(PLT)
5552 .LVL652:
5553 .LBE650:
5554 .LBE651:
695:system/core/sdcard/sdcard.c **** fuse->root.nid = FUSE_ROOT_ID; /* 1 */
5555 .loc 1 695 0
5556 018a 0021 movs r1, #0
5557 018c 0120 movs r0, #1
696:system/core/sdcard/sdcard.c **** fuse->root.refcount = 2;
5558 .loc 1 696 0
5559 018e C7F82080 str r8, [r7, #32]
5560 .LVL653:
695:system/core/sdcard/sdcard.c **** fuse->root.nid = FUSE_ROOT_ID; /* 1 */
5561 .loc 1 695 0
5562 0192 C7E90A01 strd r0, [r7, #40]
5563 .LBB652:
5564 .LBB653:
217:bionic/libc/include/string.h **** return __builtin_strlen(s);
5565 .loc 2 217 0
5566 0196 3046 mov r0, r6
5567 0198 FFF7FEFF bl strlen(PLT)
5568 .LVL654:
5569 .LBE653:
5570 .LBE652:
697:system/core/sdcard/sdcard.c **** fuse->root.namelen = strlen(source_path);
5571 .loc 1 697 0
5572 019c B865 str r0, [r7, #88]
698:system/core/sdcard/sdcard.c **** fuse->root.name = strdup(source_path);
5573 .loc 1 698 0
5574 019e 3046 mov r0, r6
5575 01a0 FFF7FEFF bl strdup(PLT)
5576 .LVL655:
703:system/core/sdcard/sdcard.c **** switch (derive) {
5577 .loc 1 703 0
5578 01a4 012D cmp r5, #1
698:system/core/sdcard/sdcard.c **** fuse->root.name = strdup(source_path);
5579 .loc 1 698 0
5580 01a6 F865 str r0, [r7, #92]
703:system/core/sdcard/sdcard.c **** switch (derive) {
5581 .loc 1 703 0
5582 01a8 0DD0 beq .L433
5583 01aa 02D3 bcc .L432
5584 01ac 4545 cmp r5, r8
5585 01ae 60D1 bne .L431
5586 01b0 3BE0 b .L434
5587 .L432:
708:system/core/sdcard/sdcard.c **** fuse->root.mode = 0775;
5588 .loc 1 708 0
5589 01b2 40F2FD16 movw r6, #509
5590 .LVL656:
707:system/core/sdcard/sdcard.c **** fuse->root.perm = PERM_ROOT;
5591 .loc 1 707 0
5592 01b6 C7F83880 str r8, [r7, #56]
709:system/core/sdcard/sdcard.c **** fuse->root.gid = AID_SDCARD_RW;
5593 .loc 1 709 0
5594 01ba 06F5FD72 add r2, r6, #506
708:system/core/sdcard/sdcard.c **** fuse->root.mode = 0775;
ARM GAS /tmp/cc3I8rcL.s page 158
5595 .loc 1 708 0
5596 01be A7F84860 strh r6, [r7, #72] @ movhi
709:system/core/sdcard/sdcard.c **** fuse->root.gid = AID_SDCARD_RW;
5597 .loc 1 709 0
5598 01c2 7A64 str r2, [r7, #68]
5599 01c4 55E0 b .L431
5600 .LVL657:
5601 .L433:
716:system/core/sdcard/sdcard.c **** fuse->root.mode = 0771;
5602 .loc 1 716 0
5603 01c6 40F2F911 movw r1, #505
718:system/core/sdcard/sdcard.c **** fuse->package_to_appid = hashmapCreate(256, str_hash, str_icase_equals);
5604 .loc 1 718 0
5605 01ca E74A ldr r2, .L481+52
717:system/core/sdcard/sdcard.c **** fuse->root.gid = AID_SDCARD_R;
5606 .loc 1 717 0
5607 01cc 40F20440 movw r0, #1028
715:system/core/sdcard/sdcard.c **** fuse->root.perm = PERM_LEGACY_PRE_ROOT;
5608 .loc 1 715 0
5609 01d0 BD63 str r5, [r7, #56]
718:system/core/sdcard/sdcard.c **** fuse->package_to_appid = hashmapCreate(256, str_hash, str_icase_equals);
5610 .loc 1 718 0
5611 01d2 07F58355 add r5, r7, #4192
5612 .LVL658:
5613 .LBB654:
5614 .LBB655:
720:system/core/sdcard/sdcard.c **** snprintf(fuse->obbpath, sizeof(fuse->obbpath), "%s/obb", source_path);
5615 .loc 1 720 0
5616 01d6 07F1700A add sl, r7, #112
5617 .LVL659:
5618 .LBE655:
5619 .LBE654:
716:system/core/sdcard/sdcard.c **** fuse->root.mode = 0771;
5620 .loc 1 716 0
5621 01da A7F84810 strh r1, [r7, #72] @ movhi
718:system/core/sdcard/sdcard.c **** fuse->package_to_appid = hashmapCreate(256, str_hash, str_icase_equals);
5622 .loc 1 718 0
5623 01de E349 ldr r1, .L481+56
717:system/core/sdcard/sdcard.c **** fuse->root.gid = AID_SDCARD_R;
5624 .loc 1 717 0
5625 01e0 7864 str r0, [r7, #68]
718:system/core/sdcard/sdcard.c **** fuse->package_to_appid = hashmapCreate(256, str_hash, str_icase_equals);
5626 .loc 1 718 0
5627 01e2 4FF48070 mov r0, #256
5628 .LPIC67:
5629 01e6 7A44 add r2, pc
5630 .LPIC66:
5631 01e8 7944 add r1, pc
5632 01ea FFF7FEFF bl hashmapCreate(PLT)
5633 .LVL660:
719:system/core/sdcard/sdcard.c **** fuse->appid_with_rw = hashmapCreate(128, int_hash, int_equals);
5634 .loc 1 719 0
5635 01ee E049 ldr r1, .L481+60
718:system/core/sdcard/sdcard.c **** fuse->package_to_appid = hashmapCreate(256, str_hash, str_icase_equals);
5636 .loc 1 718 0
5637 01f0 2861 str r0, [r5, #16]
719:system/core/sdcard/sdcard.c **** fuse->appid_with_rw = hashmapCreate(128, int_hash, int_equals);
ARM GAS /tmp/cc3I8rcL.s page 159
5638 .loc 1 719 0
5639 01f2 8020 movs r0, #128
5640 01f4 DF4A ldr r2, .L481+64
5641 .LPIC68:
5642 01f6 7944 add r1, pc
5643 .LPIC69:
5644 01f8 7A44 add r2, pc
5645 01fa FFF7FEFF bl hashmapCreate(PLT)
5646 .LVL661:
5647 .LBB658:
5648 .LBB656:
5649 .loc 4 478 0
5650 01fe DE4A ldr r2, .L481+68
5651 0200 3346 mov r3, r6
5652 0202 4FF48051 mov r1, #4096
5653 .LBE656:
5654 .LBE658:
719:system/core/sdcard/sdcard.c **** fuse->appid_with_rw = hashmapCreate(128, int_hash, int_equals);
5655 .loc 1 719 0
5656 0206 6861 str r0, [r5, #20]
5657 .LVL662:
5658 .LBB659:
5659 .LBB657:
5660 .loc 4 478 0
5661 0208 5046 mov r0, sl
5662 .LPIC70:
5663 020a 7A44 add r2, pc
5664 020c FFF7FEFF bl snprintf(PLT)
5665 .LVL663:
5666 .LBE657:
5667 .LBE659:
721:system/core/sdcard/sdcard.c **** fs_prepare_dir(fuse->obbpath, 0775, getuid(), getgid());
5668 .loc 1 721 0
5669 0210 FFF7FEFF bl getuid(PLT)
5670 .LVL664:
5671 0214 8046 mov r8, r0
5672 0216 FFF7FEFF bl getgid(PLT)
5673 .LVL665:
5674 021a 0346 mov r3, r0
5675 021c 40F2FD11 movw r1, #509
5676 0220 5046 mov r0, sl
5677 0222 4246 mov r2, r8
5678 0224 FFF7FEFF bl fs_prepare_dir(PLT)
5679 .LVL666:
5680 0228 23E0 b .L431
5681 .LVL667:
5682 .L434:
729:system/core/sdcard/sdcard.c **** fuse->package_to_appid = hashmapCreate(256, str_hash, str_icase_equals);
5683 .loc 1 729 0
5684 022a D449 ldr r1, .L481+72
728:system/core/sdcard/sdcard.c **** fuse->root.gid = AID_SDCARD_R;
5685 .loc 1 728 0
5686 022c 40F20443 movw r3, #1028
726:system/core/sdcard/sdcard.c **** fuse->root.perm = PERM_ROOT;
5687 .loc 1 726 0
5688 0230 BD63 str r5, [r7, #56]
729:system/core/sdcard/sdcard.c **** fuse->package_to_appid = hashmapCreate(256, str_hash, str_icase_equals);
ARM GAS /tmp/cc3I8rcL.s page 160
5689 .loc 1 729 0
5690 0232 D34A ldr r2, .L481+76
727:system/core/sdcard/sdcard.c **** fuse->root.mode = 0771;
5691 .loc 1 727 0
5692 0234 40F2F915 movw r5, #505
5693 .LVL668:
729:system/core/sdcard/sdcard.c **** fuse->package_to_appid = hashmapCreate(256, str_hash, str_icase_equals);
5694 .loc 1 729 0
5695 0238 4FF48070 mov r0, #256
728:system/core/sdcard/sdcard.c **** fuse->root.gid = AID_SDCARD_R;
5696 .loc 1 728 0
5697 023c 7B64 str r3, [r7, #68]
727:system/core/sdcard/sdcard.c **** fuse->root.mode = 0771;
5698 .loc 1 727 0
5699 023e A7F84850 strh r5, [r7, #72] @ movhi
729:system/core/sdcard/sdcard.c **** fuse->package_to_appid = hashmapCreate(256, str_hash, str_icase_equals);
5700 .loc 1 729 0
5701 0242 07F58355 add r5, r7, #4192
5702 .LPIC71:
5703 0246 7944 add r1, pc
5704 .LPIC72:
5705 0248 7A44 add r2, pc
5706 024a FFF7FEFF bl hashmapCreate(PLT)
5707 .LVL669:
730:system/core/sdcard/sdcard.c **** fuse->appid_with_rw = hashmapCreate(128, int_hash, int_equals);
5708 .loc 1 730 0
5709 024e CD49 ldr r1, .L481+80
729:system/core/sdcard/sdcard.c **** fuse->package_to_appid = hashmapCreate(256, str_hash, str_icase_equals);
5710 .loc 1 729 0
5711 0250 2861 str r0, [r5, #16]
730:system/core/sdcard/sdcard.c **** fuse->appid_with_rw = hashmapCreate(128, int_hash, int_equals);
5712 .loc 1 730 0
5713 0252 8020 movs r0, #128
5714 0254 CC4A ldr r2, .L481+84
5715 .LPIC73:
5716 0256 7944 add r1, pc
5717 .LPIC74:
5718 0258 7A44 add r2, pc
5719 025a FFF7FEFF bl hashmapCreate(PLT)
5720 .LVL670:
5721 .LBB660:
5722 .LBB661:
5723 .loc 4 478 0
5724 025e CB4A ldr r2, .L481+88
5725 .LBE661:
5726 .LBE660:
730:system/core/sdcard/sdcard.c **** fuse->appid_with_rw = hashmapCreate(128, int_hash, int_equals);
5727 .loc 1 730 0
5728 0260 6861 str r0, [r5, #20]
5729 .LVL671:
5730 .LBB663:
5731 .LBB662:
5732 .loc 4 478 0
5733 0262 4FF48051 mov r1, #4096
5734 0266 07F17000 add r0, r7, #112
5735 026a 3346 mov r3, r6
5736 .LPIC75:
ARM GAS /tmp/cc3I8rcL.s page 161
5737 026c 7A44 add r2, pc
5738 026e FFF7FEFF bl snprintf(PLT)
5739 .LVL672:
5740 .L431:
5741 .LBE662:
5742 .LBE663:
5743 .LBE647:
5744 .LBE646:
5745 .LBB664:
5746 .LBB665:
5747 .file 5 "bionic/libc/include/sys/stat.h"
1:bionic/libc/include/sys/stat.h **** /*
2:bionic/libc/include/sys/stat.h **** * Copyright (C) 2008 The Android Open Source Project
3:bionic/libc/include/sys/stat.h **** * All rights reserved.
4:bionic/libc/include/sys/stat.h **** *
5:bionic/libc/include/sys/stat.h **** * Redistribution and use in source and binary forms, with or without
6:bionic/libc/include/sys/stat.h **** * modification, are permitted provided that the following conditions
7:bionic/libc/include/sys/stat.h **** * are met:
8:bionic/libc/include/sys/stat.h **** * * Redistributions of source code must retain the above copyright
9:bionic/libc/include/sys/stat.h **** * notice, this list of conditions and the following disclaimer.
10:bionic/libc/include/sys/stat.h **** * * Redistributions in binary form must reproduce the above copyright
11:bionic/libc/include/sys/stat.h **** * notice, this list of conditions and the following disclaimer in
12:bionic/libc/include/sys/stat.h **** * the documentation and/or other materials provided with the
13:bionic/libc/include/sys/stat.h **** * distribution.
14:bionic/libc/include/sys/stat.h **** *
15:bionic/libc/include/sys/stat.h **** * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
16:bionic/libc/include/sys/stat.h **** * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
17:bionic/libc/include/sys/stat.h **** * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
18:bionic/libc/include/sys/stat.h **** * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
19:bionic/libc/include/sys/stat.h **** * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
20:bionic/libc/include/sys/stat.h **** * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
21:bionic/libc/include/sys/stat.h **** * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
22:bionic/libc/include/sys/stat.h **** * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
23:bionic/libc/include/sys/stat.h **** * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
24:bionic/libc/include/sys/stat.h **** * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
25:bionic/libc/include/sys/stat.h **** * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
26:bionic/libc/include/sys/stat.h **** * SUCH DAMAGE.
27:bionic/libc/include/sys/stat.h **** */
28:bionic/libc/include/sys/stat.h **** #ifndef _SYS_STAT_H_
29:bionic/libc/include/sys/stat.h **** #define _SYS_STAT_H_
30:bionic/libc/include/sys/stat.h ****
31:bionic/libc/include/sys/stat.h **** #include <sys/cdefs.h>
32:bionic/libc/include/sys/stat.h **** #include <sys/types.h>
33:bionic/libc/include/sys/stat.h **** #include <sys/time.h>
34:bionic/libc/include/sys/stat.h **** #include <linux/stat.h>
35:bionic/libc/include/sys/stat.h ****
36:bionic/libc/include/sys/stat.h **** #include <endian.h>
37:bionic/libc/include/sys/stat.h ****
38:bionic/libc/include/sys/stat.h **** __BEGIN_DECLS
39:bionic/libc/include/sys/stat.h ****
40:bionic/libc/include/sys/stat.h **** /* really matches stat64 in the kernel, hence the padding
41:bionic/libc/include/sys/stat.h **** * Note: The kernel zero's the padded region because glibc might read them
42:bionic/libc/include/sys/stat.h **** * in the hope that the kernel has stretched to using larger sizes.
43:bionic/libc/include/sys/stat.h **** */
44:bionic/libc/include/sys/stat.h **** #ifdef __mips__
45:bionic/libc/include/sys/stat.h **** struct stat {
46:bionic/libc/include/sys/stat.h **** unsigned long st_dev;
ARM GAS /tmp/cc3I8rcL.s page 162
47:bionic/libc/include/sys/stat.h **** unsigned long __pad0[3];
48:bionic/libc/include/sys/stat.h ****
49:bionic/libc/include/sys/stat.h **** unsigned long long st_ino;
50:bionic/libc/include/sys/stat.h ****
51:bionic/libc/include/sys/stat.h **** unsigned int st_mode;
52:bionic/libc/include/sys/stat.h **** unsigned int st_nlink;
53:bionic/libc/include/sys/stat.h ****
54:bionic/libc/include/sys/stat.h **** unsigned long st_uid;
55:bionic/libc/include/sys/stat.h **** unsigned long st_gid;
56:bionic/libc/include/sys/stat.h ****
57:bionic/libc/include/sys/stat.h **** unsigned long st_rdev;
58:bionic/libc/include/sys/stat.h **** unsigned long __pad1[3];
59:bionic/libc/include/sys/stat.h ****
60:bionic/libc/include/sys/stat.h **** long long st_size;
61:bionic/libc/include/sys/stat.h ****
62:bionic/libc/include/sys/stat.h **** unsigned long st_atime;
63:bionic/libc/include/sys/stat.h **** unsigned long st_atime_nsec;
64:bionic/libc/include/sys/stat.h ****
65:bionic/libc/include/sys/stat.h **** unsigned long st_mtime;
66:bionic/libc/include/sys/stat.h **** unsigned long st_mtime_nsec;
67:bionic/libc/include/sys/stat.h ****
68:bionic/libc/include/sys/stat.h **** unsigned long st_ctime;
69:bionic/libc/include/sys/stat.h **** unsigned long st_ctime_nsec;
70:bionic/libc/include/sys/stat.h ****
71:bionic/libc/include/sys/stat.h **** unsigned long st_blksize;
72:bionic/libc/include/sys/stat.h **** unsigned long __pad2;
73:bionic/libc/include/sys/stat.h ****
74:bionic/libc/include/sys/stat.h **** unsigned long long st_blocks;
75:bionic/libc/include/sys/stat.h **** };
76:bionic/libc/include/sys/stat.h **** #else
77:bionic/libc/include/sys/stat.h **** struct stat {
78:bionic/libc/include/sys/stat.h **** unsigned long long st_dev;
79:bionic/libc/include/sys/stat.h **** unsigned char __pad0[4];
80:bionic/libc/include/sys/stat.h ****
81:bionic/libc/include/sys/stat.h **** unsigned long __st_ino;
82:bionic/libc/include/sys/stat.h **** unsigned int st_mode;
83:bionic/libc/include/sys/stat.h **** unsigned int st_nlink;
84:bionic/libc/include/sys/stat.h ****
85:bionic/libc/include/sys/stat.h **** unsigned long st_uid;
86:bionic/libc/include/sys/stat.h **** unsigned long st_gid;
87:bionic/libc/include/sys/stat.h ****
88:bionic/libc/include/sys/stat.h **** unsigned long long st_rdev;
89:bionic/libc/include/sys/stat.h **** unsigned char __pad3[4];
90:bionic/libc/include/sys/stat.h ****
91:bionic/libc/include/sys/stat.h **** long long st_size;
92:bionic/libc/include/sys/stat.h **** unsigned long st_blksize;
93:bionic/libc/include/sys/stat.h **** unsigned long long st_blocks;
94:bionic/libc/include/sys/stat.h ****
95:bionic/libc/include/sys/stat.h **** unsigned long st_atime;
96:bionic/libc/include/sys/stat.h **** unsigned long st_atime_nsec;
97:bionic/libc/include/sys/stat.h ****
98:bionic/libc/include/sys/stat.h **** unsigned long st_mtime;
99:bionic/libc/include/sys/stat.h **** unsigned long st_mtime_nsec;
100:bionic/libc/include/sys/stat.h ****
101:bionic/libc/include/sys/stat.h **** unsigned long st_ctime;
102:bionic/libc/include/sys/stat.h **** unsigned long st_ctime_nsec;
103:bionic/libc/include/sys/stat.h ****
ARM GAS /tmp/cc3I8rcL.s page 163
104:bionic/libc/include/sys/stat.h **** unsigned long long st_ino;
105:bionic/libc/include/sys/stat.h **** };
106:bionic/libc/include/sys/stat.h **** #endif
107:bionic/libc/include/sys/stat.h ****
108:bionic/libc/include/sys/stat.h **** /* For compatibility with GLibc, we provide macro aliases
109:bionic/libc/include/sys/stat.h **** * for the non-Posix nano-seconds accessors.
110:bionic/libc/include/sys/stat.h **** */
111:bionic/libc/include/sys/stat.h **** #define st_atimensec st_atime_nsec
112:bionic/libc/include/sys/stat.h **** #define st_mtimensec st_mtime_nsec
113:bionic/libc/include/sys/stat.h **** #define st_ctimensec st_ctime_nsec
114:bionic/libc/include/sys/stat.h ****
115:bionic/libc/include/sys/stat.h **** #ifdef __USE_BSD
116:bionic/libc/include/sys/stat.h **** /* Permission macros provided by glibc for compatibility with BSDs. */
117:bionic/libc/include/sys/stat.h **** #define ACCESSPERMS (S_IRWXU | S_IRWXG | S_IRWXO) /* 0777 */
118:bionic/libc/include/sys/stat.h **** #define ALLPERMS (S_ISUID | S_ISGID | S_ISVTX | S_IRWXU | S_IRWXG | S_IRWXO) /* 07777 */
119:bionic/libc/include/sys/stat.h **** #define DEFFILEMODE (S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH) /* 0666 */
120:bionic/libc/include/sys/stat.h **** #endif
121:bionic/libc/include/sys/stat.h ****
122:bionic/libc/include/sys/stat.h **** extern int chmod(const char *, mode_t);
123:bionic/libc/include/sys/stat.h **** extern int fchmod(int, mode_t);
124:bionic/libc/include/sys/stat.h **** extern int mkdir(const char *, mode_t);
125:bionic/libc/include/sys/stat.h ****
126:bionic/libc/include/sys/stat.h **** extern int stat(const char *, struct stat *);
127:bionic/libc/include/sys/stat.h **** extern int fstat(int, struct stat *);
128:bionic/libc/include/sys/stat.h **** extern int lstat(const char *, struct stat *);
129:bionic/libc/include/sys/stat.h **** extern int mknod(const char *, mode_t, dev_t);
130:bionic/libc/include/sys/stat.h **** extern mode_t umask(mode_t);
131:bionic/libc/include/sys/stat.h ****
132:bionic/libc/include/sys/stat.h **** #if defined(__BIONIC_FORTIFY)
133:bionic/libc/include/sys/stat.h ****
134:bionic/libc/include/sys/stat.h **** extern mode_t __umask_chk(mode_t);
135:bionic/libc/include/sys/stat.h **** extern mode_t __umask_real(mode_t)
136:bionic/libc/include/sys/stat.h **** __asm__(__USER_LABEL_PREFIX__ "umask");
137:bionic/libc/include/sys/stat.h **** __errordecl(__umask_invalid_mode, "umask called with invalid mode");
138:bionic/libc/include/sys/stat.h ****
139:bionic/libc/include/sys/stat.h **** __BIONIC_FORTIFY_INLINE
140:bionic/libc/include/sys/stat.h **** mode_t umask(mode_t mode) {
141:bionic/libc/include/sys/stat.h **** #if !defined(__clang__)
142:bionic/libc/include/sys/stat.h **** if (__builtin_constant_p(mode)) {
143:bionic/libc/include/sys/stat.h **** if ((mode & 0777) != mode) {
144:bionic/libc/include/sys/stat.h **** __umask_invalid_mode();
145:bionic/libc/include/sys/stat.h **** }
146:bionic/libc/include/sys/stat.h **** return __umask_real(mode);
5748 .loc 5 146 0
5749 0272 0020 movs r0, #0
5750 .LBE665:
5751 .LBE664:
5752 .LBB667:
5753 .LBB668:
1721:system/core/sdcard/sdcard.c **** handlers = malloc(num_threads * sizeof(struct fuse_handler));
5754 .loc 1 1721 0
5755 0274 AF4D ldr r5, .L481
5756 .LBE668:
5757 .LBE667:
5758 .LBB695:
5759 .LBB666:
5760 .loc 5 146 0
ARM GAS /tmp/cc3I8rcL.s page 164
5761 0276 FFF7FEFF bl umask(PLT)
5762 .LVL673:
5763 .LBE666:
5764 .LBE695:
5765 .LBB696:
5766 .LBB694:
1721:system/core/sdcard/sdcard.c **** handlers = malloc(num_threads * sizeof(struct fuse_handler));
5767 .loc 1 1721 0
5768 027a 0DF5CE53 add r3, sp, #6592
5769 027e 1E1D adds r6, r3, #4
5770 .LVL674:
5771 0280 3268 ldr r2, [r6, #0]
5772 0282 A846 mov r8, r5
5773 0284 05FB02F0 mul r0, r5, r2
5774 0288 FFF7FEFF bl malloc(PLT)
5775 .LVL675:
1722:system/core/sdcard/sdcard.c **** if (!handlers) {
5776 .loc 1 1722 0
5777 028c 0646 mov r6, r0
5778 .LVL676:
5779 028e 88B9 cbnz r0, .L459
1723:system/core/sdcard/sdcard.c **** ERROR("cannot allocate storage for threads\n");
5780 .loc 1 1723 0
5781 0290 AC49 ldr r1, .L481+16
1815:system/core/sdcard/sdcard.c **** }
1816:system/core/sdcard/sdcard.c ****
1817:system/core/sdcard/sdcard.c **** fuse_init(&fuse, fd, source_path, write_gid, derive, split_perms);
1818:system/core/sdcard/sdcard.c ****
1819:system/core/sdcard/sdcard.c **** umask(0);
1820:system/core/sdcard/sdcard.c **** res = ignite_fuse(&fuse, num_threads);
5782 .loc 1 1820 0
5783 0292 6FF00B0A mvn sl, #11
1723:system/core/sdcard/sdcard.c **** ERROR("cannot allocate storage for threads\n");
5784 .loc 1 1723 0
5785 0296 BE48 ldr r0, .L481+92
5786 .LVL677:
5787 0298 6158 ldr r1, [r4, r1]
5788 .LPIC76:
5789 029a 7844 add r0, pc
5790 029c A831 adds r1, r1, #168
5791 029e FFF7FEFF bl fputs(PLT)
5792 .LVL678:
5793 02a2 34E1 b .L427
5794 .LVL679:
5795 .L436:
1772:system/core/sdcard/sdcard.c **** static int run(const char* source_path, const char* dest_path, uid_t uid,
5796 .loc 1 1772 0
5797 02a4 F219 adds r2, r6, r7
1728:system/core/sdcard/sdcard.c **** handlers[i].fuse = fuse;
5798 .loc 1 1728 0
5799 02a6 F151 str r1, [r6, r7]
5800 02a8 07F58027 add r7, r7, #262144
5801 02ac 5837 adds r7, r7, #88
1729:system/core/sdcard/sdcard.c **** handlers[i].token = i;
5802 .loc 1 1729 0
5803 02ae 5560 str r5, [r2, #4]
1727:system/core/sdcard/sdcard.c **** for (i = 0; i < num_threads; i++) {
ARM GAS /tmp/cc3I8rcL.s page 165
5804 .loc 1 1727 0
5805 02b0 0135 adds r5, r5, #1
5806 .LVL680:
5807 02b2 03E0 b .L435
5808 .LVL681:
5809 .L459:
1722:system/core/sdcard/sdcard.c **** if (!handlers) {
5810 .loc 1 1722 0
5811 02b4 0027 movs r7, #0
5812 .LVL682:
5813 02b6 0DF61811 addw r1, sp, #2328
5814 .LVL683:
5815 02ba 3D46 mov r5, r7
5816 .LVL684:
5817 .L435:
1727:system/core/sdcard/sdcard.c **** for (i = 0; i < num_threads; i++) {
5818 .loc 1 1727 0
5819 02bc 0DF5CE50 add r0, sp, #6592
5820 02c0 031D adds r3, r0, #4
5821 .LVL685:
5822 02c2 1A68 ldr r2, [r3, #0]
5823 02c4 9542 cmp r5, r2
5824 02c6 EDDB blt .L436
1734:system/core/sdcard/sdcard.c **** i = (fuse->derive == DERIVE_NONE) ? 1 : 0;
5825 .loc 1 1734 0
5826 02c8 4F69 ldr r7, [r1, #20]
5827 .LBB669:
1737:system/core/sdcard/sdcard.c **** int res = pthread_create(&thread, NULL, start_handler, &handlers[i]);
5828 .loc 1 1737 0
5829 02ca DFF8C892 ldr r9, .L481+96
5830 .LVL686:
5831 .LBE669:
1734:system/core/sdcard/sdcard.c **** i = (fuse->derive == DERIVE_NONE) ? 1 : 0;
5832 .loc 1 1734 0
5833 02ce D7F10105 rsbs r5, r7, #1
5834 .LVL687:
5835 02d2 38BF it cc
5836 02d4 0025 movcc r5, #0
5837 .LVL688:
5838 .LBB670:
1737:system/core/sdcard/sdcard.c **** int res = pthread_create(&thread, NULL, start_handler, &handlers[i]);
5839 .loc 1 1737 0
5840 .LPIC77:
5841 02d6 F944 add r9, pc
5842 .LBE670:
1772:system/core/sdcard/sdcard.c **** static int run(const char* source_path, const char* dest_path, uid_t uid,
5843 .loc 1 1772 0
5844 02d8 0027 movs r7, #0
5845 02da 08FB0568 mla r8, r8, r5, r6
5846 02de 15E0 b .L437
5847 .LVL689:
5848 .L440:
5849 .LBB671:
1737:system/core/sdcard/sdcard.c **** int res = pthread_create(&thread, NULL, start_handler, &handlers[i]);
5850 .loc 1 1737 0
5851 02e0 07EB0803 add r3, r7, r8
5852 02e4 05A8 add r0, sp, #20
ARM GAS /tmp/cc3I8rcL.s page 166
5853 .LVL690:
5854 02e6 0021 movs r1, #0
5855 .LVL691:
5856 02e8 4A46 mov r2, r9
5857 02ea FFF7FEFF bl pthread_create(PLT)
5858 .LVL692:
5859 02ee 07F58027 add r7, r7, #262144
1738:system/core/sdcard/sdcard.c **** if (res) {
5860 .loc 1 1738 0
5861 02f2 0346 mov r3, r0
5862 02f4 5837 adds r7, r7, #88
5863 02f6 40B1 cbz r0, .L438
1739:system/core/sdcard/sdcard.c **** ERROR("failed to start thread #%d, error=%d\n", i, res);
5864 .loc 1 1739 0
5865 02f8 924E ldr r6, .L481+16
5866 .LVL693:
5867 02fa 2A46 mov r2, r5
5868 02fc A649 ldr r1, .L481+100
5869 02fe A059 ldr r0, [r4, r6]
5870 .LVL694:
5871 .LPIC78:
5872 0300 7944 add r1, pc
5873 0302 A830 adds r0, r0, #168
5874 0304 FFF7FEFF bl fprintf(PLT)
5875 .LVL695:
5876 0308 FEE0 b .L439
5877 .LVL696:
5878 .L438:
5879 .LBE671:
1735:system/core/sdcard/sdcard.c **** for (; i < num_threads; i++) {
5880 .loc 1 1735 0
5881 030a 0135 adds r5, r5, #1
5882 .LVL697:
5883 .L437:
5884 030c 0DF5CE51 add r1, sp, #6592
5885 0310 081D adds r0, r1, #4
5886 .LVL698:
5887 0312 0368 ldr r3, [r0, #0]
5888 0314 9D42 cmp r5, r3
5889 0316 E3DB blt .L440
1744:system/core/sdcard/sdcard.c **** if (fuse->derive == DERIVE_NONE) {
5890 .loc 1 1744 0
5891 0318 0DF61815 addw r5, sp, #2328
5892 .LVL699:
5893 031c 6A69 ldr r2, [r5, #20]
5894 031e 12B9 cbnz r2, .L441
1745:system/core/sdcard/sdcard.c **** handle_fuse_requests(&handlers[0]);
5895 .loc 1 1745 0
5896 0320 3046 mov r0, r6
5897 .LVL700:
5898 0322 FFF7FEFF bl handle_fuse_requests(PLT)
5899 .LVL701:
5900 .L441:
5901 .LBB672:
5902 .LBB673:
1658:system/core/sdcard/sdcard.c **** int nfd = inotify_init();
5903 .loc 1 1658 0
ARM GAS /tmp/cc3I8rcL.s page 167
5904 0326 FFF7FEFF bl inotify_init(PLT)
5905 .LVL702:
1659:system/core/sdcard/sdcard.c **** if (nfd < 0) {
5906 .loc 1 1659 0
5907 032a B0F10008 subs r8, r0, #0
5908 032e 0BDA bge .L460
1660:system/core/sdcard/sdcard.c **** ERROR("inotify_init failed: %s\n", strerror(errno));
5909 .loc 1 1660 0
5910 0330 844D ldr r5, .L481+16
5911 .LVL703:
5912 0332 FFF7FEFF bl __errno(PLT)
5913 .LVL704:
5914 0336 0068 ldr r0, [r0, #0]
5915 0338 FFF7FEFF bl strerror(PLT)
5916 .LVL705:
5917 033c 0246 mov r2, r0
5918 033e 9749 ldr r1, .L481+104
5919 0340 6059 ldr r0, [r4, r5]
5920 .LPIC79:
5921 0342 7944 add r1, pc
5922 0344 A830 adds r0, r0, #168
5923 0346 C6E0 b .L479
5924 .LVL706:
5925 .L460:
5926 .LBB674:
5927 .LBB675:
5928 .LBB676:
5929 .LBB677:
1615:system/core/sdcard/sdcard.c **** hashmapForEach(fuse->package_to_appid, remove_str_to_int, fuse->package_to_appid);
5930 .loc 1 1615 0
5931 0348 05F58356 add r6, r5, #4192
5932 .LVL707:
5933 .LBE677:
5934 .LBE676:
5935 .LBE675:
5936 .LBE674:
1659:system/core/sdcard/sdcard.c **** if (nfd < 0) {
5937 .loc 1 1659 0
5938 034c 0027 movs r7, #0
5939 .LBB693:
5940 .LBB690:
5941 .LBB686:
5942 .LBB682:
1615:system/core/sdcard/sdcard.c **** hashmapForEach(fuse->package_to_appid, remove_str_to_int, fuse->package_to_appid);
5943 .loc 1 1615 0
5944 034e 06F11009 add r9, r6, #16
5945 .LVL708:
5946 .L477:
5947 .LBE682:
5948 .LBE686:
5949 .LBE690:
1666:system/core/sdcard/sdcard.c **** if (!active) {
5950 .loc 1 1666 0
5951 0352 002F cmp r7, #0
5952 0354 40F0A680 bne .L444
5953 .LBB691:
1667:system/core/sdcard/sdcard.c **** int res = inotify_add_watch(nfd, kPackagesListFile, IN_DELETE_SELF);
ARM GAS /tmp/cc3I8rcL.s page 168
5954 .loc 1 1667 0
5955 0358 914F ldr r7, .L481+108
5956 .LVL709:
1671:system/core/sdcard/sdcard.c **** ERROR("missing packages.list; retrying\n");
5957 .loc 1 1671 0
5958 035a DFF848A2 ldr sl, .L481+112
1667:system/core/sdcard/sdcard.c **** int res = inotify_add_watch(nfd, kPackagesListFile, IN_DELETE_SELF);
5959 .loc 1 1667 0
5960 .LPIC80:
5961 035e 7F44 add r7, pc
1671:system/core/sdcard/sdcard.c **** ERROR("missing packages.list; retrying\n");
5962 .loc 1 1671 0
5963 .LPIC81:
5964 0360 FA44 add sl, pc
5965 .L478:
1667:system/core/sdcard/sdcard.c **** int res = inotify_add_watch(nfd, kPackagesListFile, IN_DELETE_SELF);
5966 .loc 1 1667 0
5967 0362 4046 mov r0, r8
5968 0364 3946 mov r1, r7
5969 0366 4FF48062 mov r2, #1024
5970 036a FFF7FEFF bl inotify_add_watch(PLT)
5971 .LVL710:
1668:system/core/sdcard/sdcard.c **** if (res == -1) {
5972 .loc 1 1668 0
5973 036e 0130 adds r0, r0, #1
5974 .LVL711:
5975 0370 1CD1 bne .L445
1669:system/core/sdcard/sdcard.c **** if (errno == ENOENT || errno == EACCES) {
5976 .loc 1 1669 0
5977 0372 FFF7FEFF bl __errno(PLT)
5978 .LVL712:
5979 0376 0268 ldr r2, [r0, #0]
5980 0378 7249 ldr r1, .L481+16
5981 037a 022A cmp r2, #2
5982 037c 54F801B0 ldr fp, [r4, r1]
5983 0380 02D0 beq .L446
5984 0382 0368 ldr r3, [r0, #0]
5985 0384 0D2B cmp r3, #13
5986 0386 08D1 bne .L447
5987 .L446:
1671:system/core/sdcard/sdcard.c **** ERROR("missing packages.list; retrying\n");
5988 .loc 1 1671 0
5989 0388 5046 mov r0, sl
5990 038a 0BF1A801 add r1, fp, #168
5991 038e FFF7FEFF bl fputs(PLT)
5992 .LVL713:
1672:system/core/sdcard/sdcard.c **** sleep(3);
5993 .loc 1 1672 0
5994 0392 0320 movs r0, #3
5995 0394 FFF7FEFF bl sleep(PLT)
5996 .LVL714:
5997 0398 E3E7 b .L478
5998 .L447:
1675:system/core/sdcard/sdcard.c **** ERROR("inotify_add_watch failed: %s\n", strerror(errno));
5999 .loc 1 1675 0
6000 039a 0068 ldr r0, [r0, #0]
6001 039c FFF7FEFF bl strerror(PLT)
ARM GAS /tmp/cc3I8rcL.s page 169
6002 .LVL715:
6003 03a0 8149 ldr r1, .L481+116
6004 03a2 0246 mov r2, r0
6005 03a4 0BF1A800 add r0, fp, #168
6006 .LPIC82:
6007 03a8 7944 add r1, pc
6008 03aa 94E0 b .L479
6009 .LVL716:
6010 .L445:
6011 .LBB687:
6012 .LBB683:
1613:system/core/sdcard/sdcard.c **** pthread_mutex_lock(&fuse->lock);
6013 .loc 1 1613 0
6014 03ac 2846 mov r0, r5
6015 .LVL717:
6016 03ae FFF7FEFF bl pthread_mutex_lock(PLT)
6017 .LVL718:
1615:system/core/sdcard/sdcard.c **** hashmapForEach(fuse->package_to_appid, remove_str_to_int, fuse->package_to_appid);
6018 .loc 1 1615 0
6019 03b2 D9F80000 ldr r0, [r9, #0]
6020 03b6 7D49 ldr r1, .L481+120
6021 03b8 0246 mov r2, r0
6022 .LPIC83:
6023 03ba 7944 add r1, pc
6024 03bc FFF7FEFF bl hashmapForEach(PLT)
6025 .LVL719:
1616:system/core/sdcard/sdcard.c **** hashmapForEach(fuse->appid_with_rw, remove_int_to_null, fuse->appid_with_rw);
6026 .loc 1 1616 0
6027 03c0 7069 ldr r0, [r6, #20]
6028 03c2 7B49 ldr r1, .L481+124
6029 03c4 0246 mov r2, r0
6030 .LPIC84:
6031 03c6 7944 add r1, pc
6032 03c8 FFF7FEFF bl hashmapForEach(PLT)
6033 .LVL720:
1618:system/core/sdcard/sdcard.c **** FILE* file = fopen(kPackagesListFile, "r");
6034 .loc 1 1618 0
6035 03cc 7949 ldr r1, .L481+128
6036 03ce 3846 mov r0, r7
6037 .LPIC86:
6038 03d0 7944 add r1, pc
6039 03d2 FFF7FEFF bl fopen(PLT)
6040 .LVL721:
1619:system/core/sdcard/sdcard.c **** if (!file) {
6041 .loc 1 1619 0
6042 03d6 0746 mov r7, r0
6043 03d8 0028 cmp r0, #0
6044 03da 51D1 bne .L470
1620:system/core/sdcard/sdcard.c **** ERROR("failed to open package list: %s\n", strerror(errno));
6045 .loc 1 1620 0
6046 03dc 594E ldr r6, .L481+16
6047 03de FFF7FEFF bl __errno(PLT)
6048 .LVL722:
6049 03e2 0068 ldr r0, [r0, #0]
6050 03e4 FFF7FEFF bl strerror(PLT)
6051 .LVL723:
6052 03e8 A759 ldr r7, [r4, r6]
ARM GAS /tmp/cc3I8rcL.s page 170
6053 .LVL724:
6054 03ea 0246 mov r2, r0
6055 03ec 7249 ldr r1, .L481+132
6056 03ee A837 adds r7, r7, #168
6057 .LPIC87:
6058 03f0 7944 add r1, pc
6059 03f2 3846 mov r0, r7
6060 03f4 FFF7FEFF bl fprintf(PLT)
6061 .LVL725:
1621:system/core/sdcard/sdcard.c **** pthread_mutex_unlock(&fuse->lock);
6062 .loc 1 1621 0
6063 03f8 2846 mov r0, r5
6064 03fa FFF7FEFF bl pthread_mutex_unlock(PLT)
6065 .LVL726:
6066 .LBE683:
6067 .LBE687:
1683:system/core/sdcard/sdcard.c **** ERROR("read_package_list failed: %s\n", strerror(errno));
6068 .loc 1 1683 0
6069 03fe FFF7FEFF bl __errno(PLT)
6070 .LVL727:
6071 0402 0068 ldr r0, [r0, #0]
6072 0404 FFF7FEFF bl strerror(PLT)
6073 .LVL728:
6074 0408 6C49 ldr r1, .L481+136
6075 040a 0246 mov r2, r0
6076 040c 3846 mov r0, r7
6077 .LPIC91:
6078 040e 7944 add r1, pc
6079 0410 61E0 b .L479
6080 .LVL729:
6081 .L455:
6082 .LBB688:
6083 .LBB684:
6084 .LBB678:
1631:system/core/sdcard/sdcard.c **** if (sscanf(buf, "%s %d %*d %*s %*s %s", package_name, &appid, gids) == 3) {
6085 .loc 1 1631 0
6086 0412 0DF5E36A add sl, sp, #1816
6087 0416 C6A8 add r0, sp, #792
6088 .LVL730:
6089 0418 5946 mov r1, fp
6090 041a 0DF5A362 add r2, sp, #1304
6091 041e CDF800A0 str sl, [sp, #0]
6092 0422 05AB add r3, sp, #20
6093 0424 FFF7FEFF bl sscanf(PLT)
6094 .LVL731:
6095 0428 0328 cmp r0, #3
6096 042a 2CD1 bne .L476
6097 .LBB679:
1632:system/core/sdcard/sdcard.c **** char* package_name_dup = strdup(package_name);
6098 .loc 1 1632 0
6099 042c 0DF5A360 add r0, sp, #1304
6100 0430 FFF7FEFF bl strdup(PLT)
6101 .LVL732:
6102 0434 0146 mov r1, r0
6103 .LVL733:
1633:system/core/sdcard/sdcard.c **** hashmapPut(fuse->package_to_appid, package_name_dup, (void*) appid);
6104 .loc 1 1633 0
ARM GAS /tmp/cc3I8rcL.s page 171
6105 0436 059A ldr r2, [sp, #20]
6106 0438 D9F80000 ldr r0, [r9, #0]
6107 .LVL734:
6108 043c FFF7FEFF bl hashmapPut(PLT)
6109 .LVL735:
1635:system/core/sdcard/sdcard.c **** char* token = strtok(gids, ",");
6110 .loc 1 1635 0
6111 0440 5F49 ldr r1, .L481+140
6112 0442 5046 mov r0, sl
1641:system/core/sdcard/sdcard.c **** token = strtok(NULL, ",");
6113 .loc 1 1641 0
6114 0444 DFF87CA1 ldr sl, .L481+144
1635:system/core/sdcard/sdcard.c **** char* token = strtok(gids, ",");
6115 .loc 1 1635 0
6116 .LPIC89:
6117 0448 7944 add r1, pc
6118 044a FFF7FEFF bl strtok(PLT)
6119 .LVL736:
1641:system/core/sdcard/sdcard.c **** token = strtok(NULL, ",");
6120 .loc 1 1641 0
6121 .LPIC90:
6122 044e FA44 add sl, pc
6123 0450 13E0 b .L452
6124 .L454:
1637:system/core/sdcard/sdcard.c **** if (strtoul(token, NULL, 10) == fuse->write_gid) {
6125 .loc 1 1637 0
6126 0452 0021 movs r1, #0
6127 0454 0A22 movs r2, #10
6128 0456 FFF7FEFF bl strtoul(PLT)
6129 .LVL737:
6130 045a E969 ldr r1, [r5, #28]
6131 045c 8842 cmp r0, r1
6132 045e 08D1 bne .L453
1638:system/core/sdcard/sdcard.c **** hashmapPut(fuse->appid_with_rw, (void*) appid, (void*) 1);
6133 .loc 1 1638 0
6134 0460 0DF5CC53 add r3, sp, #6528
6135 0464 0599 ldr r1, [sp, #20]
6136 0466 0122 movs r2, #1
6137 0468 0C33 adds r3, r3, #12
6138 046a 1868 ldr r0, [r3, #0]
6139 046c FFF7FEFF bl hashmapPut(PLT)
6140 .LVL738:
6141 0470 09E0 b .L476
6142 .L453:
1641:system/core/sdcard/sdcard.c **** token = strtok(NULL, ",");
6143 .loc 1 1641 0
6144 0472 0020 movs r0, #0
6145 0474 5146 mov r1, sl
6146 0476 FFF7FEFF bl strtok(PLT)
6147 .LVL739:
6148 .L452:
1636:system/core/sdcard/sdcard.c **** while (token != NULL) {
6149 .loc 1 1636 0
6150 047a 0028 cmp r0, #0
6151 047c E9D1 bne .L454
6152 047e 02E0 b .L476
6153 .LVL740:
ARM GAS /tmp/cc3I8rcL.s page 172
6154 .L470:
6155 .LBE679:
1631:system/core/sdcard/sdcard.c **** if (sscanf(buf, "%s %d %*d %*s %*s %s", package_name, &appid, gids) == 3) {
6156 .loc 1 1631 0
6157 0480 DFF844B1 ldr fp, .L481+148
6158 .LPIC88:
6159 0484 FB44 add fp, pc
6160 .LVL741:
6161 .L476:
6162 .LBE678:
6163 .LBB680:
6164 .LBB681:
479:bionic/libc/include/stdio.h **** __bos(dest), format, __builtin_va_arg_pack());
480:bionic/libc/include/stdio.h **** }
481:bionic/libc/include/stdio.h **** #endif
482:bionic/libc/include/stdio.h ****
483:bionic/libc/include/stdio.h **** #if defined(__clang__)
484:bionic/libc/include/stdio.h **** #define sprintf(dest, ...) __builtin___sprintf_chk(dest, 0, __bos(dest), __VA_ARGS__)
485:bionic/libc/include/stdio.h **** #else
486:bionic/libc/include/stdio.h **** __BIONIC_FORTIFY_INLINE
487:bionic/libc/include/stdio.h **** __printflike(2, 3)
488:bionic/libc/include/stdio.h **** int sprintf(char *dest, const char *format, ...)
489:bionic/libc/include/stdio.h **** {
490:bionic/libc/include/stdio.h **** return __builtin___sprintf_chk(dest, 0,
491:bionic/libc/include/stdio.h **** __bos(dest), format, __builtin_va_arg_pack());
492:bionic/libc/include/stdio.h **** }
493:bionic/libc/include/stdio.h **** #endif
494:bionic/libc/include/stdio.h ****
495:bionic/libc/include/stdio.h **** #if !defined(__clang__)
496:bionic/libc/include/stdio.h **** extern char *__fgets_real(char *, int, FILE *)
497:bionic/libc/include/stdio.h **** __asm__(__USER_LABEL_PREFIX__ "fgets");
498:bionic/libc/include/stdio.h **** __errordecl(__fgets_too_big_error, "fgets called with size bigger than buffer");
499:bionic/libc/include/stdio.h **** __errordecl(__fgets_too_small_error, "fgets called with size less than zero");
500:bionic/libc/include/stdio.h **** extern char *__fgets_chk(char *, int, FILE *, size_t);
501:bionic/libc/include/stdio.h ****
502:bionic/libc/include/stdio.h **** __BIONIC_FORTIFY_INLINE
503:bionic/libc/include/stdio.h **** char *fgets(char *dest, int size, FILE *stream)
504:bionic/libc/include/stdio.h **** {
505:bionic/libc/include/stdio.h **** size_t bos = __bos(dest);
506:bionic/libc/include/stdio.h ****
507:bionic/libc/include/stdio.h **** // Compiler can prove, at compile time, that the passed in size
508:bionic/libc/include/stdio.h **** // is always negative. Force a compiler error.
509:bionic/libc/include/stdio.h **** if (__builtin_constant_p(size) && (size < 0)) {
510:bionic/libc/include/stdio.h **** __fgets_too_small_error();
511:bionic/libc/include/stdio.h **** }
512:bionic/libc/include/stdio.h ****
513:bionic/libc/include/stdio.h **** // Compiler doesn't know destination size. Don't call __fgets_chk
514:bionic/libc/include/stdio.h **** if (bos == __BIONIC_FORTIFY_UNKNOWN_SIZE) {
515:bionic/libc/include/stdio.h **** return __fgets_real(dest, size, stream);
516:bionic/libc/include/stdio.h **** }
517:bionic/libc/include/stdio.h ****
518:bionic/libc/include/stdio.h **** // Compiler can prove, at compile time, that the passed in size
519:bionic/libc/include/stdio.h **** // is always <= the actual object size. Don't call __fgets_chk
520:bionic/libc/include/stdio.h **** if (__builtin_constant_p(size) && (size <= (int) bos)) {
521:bionic/libc/include/stdio.h **** return __fgets_real(dest, size, stream);
6165 .loc 4 521 0
6166 0486 C6A8 add r0, sp, #792
ARM GAS /tmp/cc3I8rcL.s page 173
6167 .LVL742:
6168 0488 4FF40071 mov r1, #512
6169 048c 3A46 mov r2, r7
6170 048e FFF7FEFF bl fgets(PLT)
6171 .LVL743:
6172 .LBE681:
6173 .LBE680:
1626:system/core/sdcard/sdcard.c **** while (fgets(buf, sizeof(buf), file) != NULL) {
6174 .loc 1 1626 0
6175 0492 0028 cmp r0, #0
6176 0494 BDD1 bne .L455
1649:system/core/sdcard/sdcard.c **** fclose(file);
6177 .loc 1 1649 0
6178 0496 3846 mov r0, r7
6179 .LBE684:
6180 .LBE688:
1686:system/core/sdcard/sdcard.c **** active = true;
6181 .loc 1 1686 0
6182 0498 0127 movs r7, #1
6183 .LVL744:
6184 .LBB689:
6185 .LBB685:
1649:system/core/sdcard/sdcard.c **** fclose(file);
6186 .loc 1 1649 0
6187 049a FFF7FEFF bl fclose(PLT)
6188 .LVL745:
1650:system/core/sdcard/sdcard.c **** pthread_mutex_unlock(&fuse->lock);
6189 .loc 1 1650 0
6190 049e 2846 mov r0, r5
6191 04a0 FFF7FEFF bl pthread_mutex_unlock(PLT)
6192 .LVL746:
6193 .L444:
6194 .LBE685:
6195 .LBE689:
6196 .LBE691:
1690:system/core/sdcard/sdcard.c **** int res = read(nfd, event_buf, sizeof(event_buf));
6197 .loc 1 1690 0
6198 04a4 0DF58C7A add sl, sp, #280
6199 04a8 4046 mov r0, r8
6200 04aa 5146 mov r1, sl
6201 04ac 4FF40072 mov r2, #512
6202 04b0 FFF7FEFF bl read(PLT)
6203 .LVL747:
1691:system/core/sdcard/sdcard.c **** if (res < (int) sizeof(*event)) {
6204 .loc 1 1691 0
6205 04b4 0F28 cmp r0, #15
6206 04b6 11DC bgt .L462
1692:system/core/sdcard/sdcard.c **** if (errno == EINTR)
6207 .loc 1 1692 0
6208 04b8 FFF7FEFF bl __errno(PLT)
6209 .LVL748:
6210 04bc 0268 ldr r2, [r0, #0]
6211 04be 042A cmp r2, #4
6212 04c0 3FF447AF beq .L477
1694:system/core/sdcard/sdcard.c **** ERROR("failed to read inotify event: %s\n", strerror(errno));
6213 .loc 1 1694 0
6214 04c4 0068 ldr r0, [r0, #0]
ARM GAS /tmp/cc3I8rcL.s page 174
6215 04c6 FFF7FEFF bl strerror(PLT)
6216 .LVL749:
6217 04ca 0246 mov r2, r0
6218 04cc 1D48 ldr r0, .L481+16
6219 04ce 3F49 ldr r1, .L481+152
6220 04d0 2058 ldr r0, [r4, r0]
6221 .LPIC92:
6222 04d2 7944 add r1, pc
6223 04d4 A830 adds r0, r0, #168
6224 .LVL750:
6225 .L479:
6226 04d6 FFF7FEFF bl fprintf(PLT)
6227 .LVL751:
6228 04da 0EE0 b .L443
6229 .LVL752:
6230 .L462:
1691:system/core/sdcard/sdcard.c **** if (res < (int) sizeof(*event)) {
6231 .loc 1 1691 0
6232 04dc 0023 movs r3, #0
6233 .LVL753:
6234 .L456:
6235 .LBB692:
1700:system/core/sdcard/sdcard.c **** event = (struct inotify_event *) (event_buf + event_pos);
6236 .loc 1 1700 0
6237 04de 0AEB0301 add r1, sl, r3
6238 .LVL754:
1703:system/core/sdcard/sdcard.c **** if ((event->mask & IN_IGNORED) == IN_IGNORED) {
6239 .loc 1 1703 0
6240 04e2 4A68 ldr r2, [r1, #4]
1709:system/core/sdcard/sdcard.c **** event_size = sizeof(*event) + event->len;
6241 .loc 1 1709 0
6242 04e4 C968 ldr r1, [r1, #12]
6243 .LVL755:
1706:system/core/sdcard/sdcard.c **** active = false;
6244 .loc 1 1706 0
6245 04e6 12F4004F tst r2, #32768
6246 04ea 18BF it ne
6247 04ec 0027 movne r7, #0
6248 .LVL756:
1709:system/core/sdcard/sdcard.c **** event_size = sizeof(*event) + event->len;
6249 .loc 1 1709 0
6250 04ee 1031 adds r1, r1, #16
6251 .LVL757:
1710:system/core/sdcard/sdcard.c **** res -= event_size;
6252 .loc 1 1710 0
6253 04f0 401A subs r0, r0, r1
6254 .LVL758:
1711:system/core/sdcard/sdcard.c **** event_pos += event_size;
6255 .loc 1 1711 0
6256 04f2 5B18 adds r3, r3, r1
6257 .LVL759:
6258 .LBE692:
1698:system/core/sdcard/sdcard.c **** while (res >= (int) sizeof(*event)) {
6259 .loc 1 1698 0
6260 04f4 0F28 cmp r0, #15
6261 04f6 F2DC bgt .L456
6262 04f8 2BE7 b .L477
ARM GAS /tmp/cc3I8rcL.s page 175
6263 .LVL760:
6264 .L443:
6265 .LBE693:
6266 .LBE673:
6267 .LBE672:
1750:system/core/sdcard/sdcard.c **** ERROR("terminated prematurely\n");
6268 .loc 1 1750 0
6269 04fa 1248 ldr r0, .L481+16
6270 04fc 2158 ldr r1, [r4, r0]
6271 04fe 3448 ldr r0, .L481+156
6272 0500 A831 adds r1, r1, #168
6273 .LPIC93:
6274 0502 7844 add r0, pc
6275 0504 FFF7FEFF bl fputs(PLT)
6276 .LVL761:
6277 .L439:
1755:system/core/sdcard/sdcard.c **** exit(1);
6278 .loc 1 1755 0
6279 0508 0120 movs r0, #1
6280 050a FFF7FEFF bl exit(PLT)
6281 .LVL762:
6282 .L427:
6283 .LBE694:
6284 .LBE696:
1821:system/core/sdcard/sdcard.c ****
1822:system/core/sdcard/sdcard.c **** /* we do not attempt to umount the file system here because we are no longer
1823:system/core/sdcard/sdcard.c **** * running as the root user */
1824:system/core/sdcard/sdcard.c ****
1825:system/core/sdcard/sdcard.c **** error:
1826:system/core/sdcard/sdcard.c **** close(fd);
6285 .loc 1 1826 0
6286 050e 0298 ldr r0, [sp, #8]
6287 0510 FFF7FEFF bl close(PLT)
6288 .LVL763:
6289 .L425:
1827:system/core/sdcard/sdcard.c **** return res;
1828:system/core/sdcard/sdcard.c **** }
6290 .loc 1 1828 0
6291 0514 039B ldr r3, [sp, #12]
6292 0516 0DF5CC52 add r2, sp, #6528
6293 051a 5046 mov r0, sl
6294 051c 1432 adds r2, r2, #20
6295 051e 1268 ldr r2, [r2, #0]
6296 0520 1968 ldr r1, [r3, #0]
6297 0522 8A42 cmp r2, r1
6298 0524 01D0 beq .L458
6299 0526 FFF7FEFF bl __stack_chk_fail(PLT)
6300 .LVL764:
6301 .L458:
6302 052a 67B0 add sp, sp, #412
6303 052c 0DF5C05D add sp, sp, #6144
6304 0530 BDE8F08F pop {r4, r5, r6, r7, r8, r9, sl, fp, pc}
6305 .L482:
6306 .align 2
6307 .L481:
6308 0534 58000400 .word 262232
6309 0538 0C050000 .word _GLOBAL_OFFSET_TABLE_-(.LPIC55+4)
ARM GAS /tmp/cc3I8rcL.s page 176
6310 053c 00000000 .word __stack_chk_guard(GOT)
6311 0540 0A050000 .word .LC25-(.LPIC56+4)
6312 0544 00000000 .word __sF(GOT)
6313 0548 D4040000 .word .LC26-(.LPIC57+4)
6314 054c BA040000 .word .LC27-(.LPIC58+4)
6315 0550 AA040000 .word .LC28-(.LPIC60+4)
6316 0554 8A040000 .word .LC29-(.LPIC61+4)
6317 0558 84040000 .word .LANCHOR0-(.LPIC62+4)
6318 055c 66040000 .word .LC30-(.LPIC63+4)
6319 0560 42040000 .word .LC31-(.LPIC64+4)
6320 0564 1C040000 .word .LC32-(.LPIC65+4)
6321 0568 7E030000 .word str_icase_equals-(.LPIC67+4)
6322 056c 80030000 .word str_hash-(.LPIC66+4)
6323 0570 76030000 .word int_hash-(.LPIC68+4)
6324 0574 78030000 .word int_equals-(.LPIC69+4)
6325 0578 6A030000 .word .LC33-(.LPIC70+4)
6326 057c 32030000 .word str_hash-(.LPIC71+4)
6327 0580 34030000 .word str_icase_equals-(.LPIC72+4)
6328 0584 2A030000 .word int_hash-(.LPIC73+4)
6329 0588 2C030000 .word int_equals-(.LPIC74+4)
6330 058c 1C030000 .word .LC34-(.LPIC75+4)
6331 0590 F2020000 .word .LC35-(.LPIC76+4)
6332 0594 BA020000 .word start_handler-(.LPIC77+4)
6333 0598 94020000 .word .LC36-(.LPIC78+4)
6334 059c 56020000 .word .LC37-(.LPIC79+4)
6335 05a0 3E020000 .word .LC38-(.LPIC80+4)
6336 05a4 40020000 .word .LC39-(.LPIC81+4)
6337 05a8 FC010000 .word .LC40-(.LPIC82+4)
6338 05ac EE010000 .word remove_str_to_int-(.LPIC83+4)
6339 05b0 E6010000 .word remove_int_to_null-(.LPIC84+4)
6340 05b4 E0010000 .word .LC41-(.LPIC86+4)
6341 05b8 C4010000 .word .LC42-(.LPIC87+4)
6342 05bc AA010000 .word .LC45-(.LPIC91+4)
6343 05c0 74010000 .word .LC44-(.LPIC89+4)
6344 05c4 72010000 .word .LC44-(.LPIC90+4)
6345 05c8 40010000 .word .LC43-(.LPIC88+4)
6346 05cc F6000000 .word .LC46-(.LPIC92+4)
6347 05d0 CA000000 .word .LC47-(.LPIC93+4)
6348 .cfi_endproc
6349 .LFE119:
6350 .fnend
6352 .section .text.start_handler,"ax",%progbits
6353 .align 1
6354 .thumb
6355 .thumb_func
6357 start_handler:
6358 .fnstart
6359 .LFB112:
1593:system/core/sdcard/sdcard.c **** {
6360 .loc 1 1593 0
6361 .cfi_startproc
6362 @ args = 0, pretend = 0, frame = 0
6363 @ frame_needed = 0, uses_anonymous_args = 0
6364 .LVL765:
6365 0000 08B5 push {r3, lr}
6366 .save {r3, lr}
6367 .LCFI61:
ARM GAS /tmp/cc3I8rcL.s page 177
6368 .cfi_def_cfa_offset 8
6369 .cfi_offset 3, -8
6370 .cfi_offset 14, -4
1595:system/core/sdcard/sdcard.c **** handle_fuse_requests(handler);
6371 .loc 1 1595 0
6372 0002 FFF7FEFF bl handle_fuse_requests(PLT)
6373 .LVL766:
6374 .cfi_endproc
6375 .LFE112:
6376 .fnend
6378 .section .text.sdcard_main,"ax",%progbits
6379 .align 1
6380 .global sdcard_main
6381 .thumb
6382 .thumb_func
6384 sdcard_main:
6385 .fnstart
6386 .LFB120:
1829:system/core/sdcard/sdcard.c ****
1830:system/core/sdcard/sdcard.c **** int sdcard_main(int argc, char **argv)
1831:system/core/sdcard/sdcard.c **** {
6387 .loc 1 1831 0
6388 .cfi_startproc
6389 @ args = 0, pretend = 0, frame = 24
6390 @ frame_needed = 0, uses_anonymous_args = 0
6391 .LVL767:
6392 0000 2DE9F04F push {r4, r5, r6, r7, r8, r9, sl, fp, lr}
6393 .save {r4, r5, r6, r7, r8, r9, sl, fp, lr}
6394 .LCFI62:
6395 .cfi_def_cfa_offset 36
6396 .cfi_offset 4, -36
6397 .cfi_offset 5, -32
6398 .cfi_offset 6, -28
6399 .cfi_offset 7, -24
6400 .cfi_offset 8, -20
6401 .cfi_offset 9, -16
6402 .cfi_offset 10, -12
6403 .cfi_offset 11, -8
6404 .cfi_offset 14, -4
1832:system/core/sdcard/sdcard.c **** int res;
1833:system/core/sdcard/sdcard.c **** const char *source_path = NULL;
1834:system/core/sdcard/sdcard.c **** const char *dest_path = NULL;
1835:system/core/sdcard/sdcard.c **** uid_t uid = 0;
1836:system/core/sdcard/sdcard.c **** gid_t gid = 0;
1837:system/core/sdcard/sdcard.c **** gid_t write_gid = AID_SDCARD_RW;
6405 .loc 1 1837 0
6406 0004 40F2F733 movw r3, #1015
1831:system/core/sdcard/sdcard.c **** {
6407 .loc 1 1831 0
6408 0008 DFF8B0B1 ldr fp, .L525
6409 .pad #44
6410 000c 8BB0 sub sp, sp, #44
6411 .LCFI63:
6412 .cfi_def_cfa_offset 80
1838:system/core/sdcard/sdcard.c **** int num_threads = DEFAULT_NUM_THREADS;
1839:system/core/sdcard/sdcard.c **** derive_t derive = DERIVE_NONE;
1840:system/core/sdcard/sdcard.c **** bool split_perms = false;
ARM GAS /tmp/cc3I8rcL.s page 178
6413 .loc 1 1840 0
6414 000e 0026 movs r6, #0
1841:system/core/sdcard/sdcard.c **** int i;
1842:system/core/sdcard/sdcard.c **** struct rlimit rlim;
1843:system/core/sdcard/sdcard.c ****
1844:system/core/sdcard/sdcard.c **** int opt;
1845:system/core/sdcard/sdcard.c **** while ((opt = getopt(argc, argv, "u:g:w:t:dls")) != -1) {
6415 .loc 1 1845 0
6416 0010 6B4F ldr r7, .L525+4
1839:system/core/sdcard/sdcard.c **** derive_t derive = DERIVE_NONE;
6417 .loc 1 1839 0
6418 0012 B146 mov r9, r6
1838:system/core/sdcard/sdcard.c **** int num_threads = DEFAULT_NUM_THREADS;
6419 .loc 1 1838 0
6420 0014 4FF0020A mov sl, #2
1831:system/core/sdcard/sdcard.c **** {
6421 .loc 1 1831 0
6422 0018 0690 str r0, [sp, #24]
1836:system/core/sdcard/sdcard.c **** gid_t gid = 0;
6423 .loc 1 1836 0
6424 001a 3446 mov r4, r6
1835:system/core/sdcard/sdcard.c **** uid_t uid = 0;
6425 .loc 1 1835 0
6426 001c 3546 mov r5, r6
1831:system/core/sdcard/sdcard.c **** {
6427 .loc 1 1831 0
6428 001e 0791 str r1, [sp, #28]
6429 .LPIC94:
6430 0020 FB44 add fp, pc
1837:system/core/sdcard/sdcard.c **** gid_t write_gid = AID_SDCARD_RW;
6431 .loc 1 1837 0
6432 0022 0593 str r3, [sp, #20]
6433 .LVL768:
6434 .loc 1 1845 0
6435 .LPIC95:
6436 0024 7F44 add r7, pc
6437 0026 3EE0 b .L521
6438 .LVL769:
6439 .L496:
1846:system/core/sdcard/sdcard.c **** switch (opt) {
6440 .loc 1 1846 0
6441 0028 6438 subs r0, r0, #100
6442 .LVL770:
6443 002a 1328 cmp r0, #19
6444 002c 6AD8 bhi .L523
6445 002e DFE800F0 tbb [pc, r0]
6446 .L494:
6447 0032 35 .byte (.L487-.L494)/2
6448 0033 69 .byte (.L523-.L494)/2
6449 0034 69 .byte (.L523-.L494)/2
6450 0035 14 .byte (.L488-.L494)/2
6451 0036 69 .byte (.L523-.L494)/2
6452 0037 69 .byte (.L523-.L494)/2
6453 0038 69 .byte (.L523-.L494)/2
6454 0039 69 .byte (.L523-.L494)/2
6455 003a 38 .byte (.L509-.L494)/2
6456 003b 69 .byte (.L523-.L494)/2
ARM GAS /tmp/cc3I8rcL.s page 179
6457 003c 69 .byte (.L523-.L494)/2
6458 003d 69 .byte (.L523-.L494)/2
6459 003e 69 .byte (.L523-.L494)/2
6460 003f 69 .byte (.L523-.L494)/2
6461 0040 69 .byte (.L523-.L494)/2
6462 0041 33 .byte (.L490-.L494)/2
6463 0042 29 .byte (.L491-.L494)/2
6464 0043 0A .byte (.L492-.L494)/2
6465 0044 69 .byte (.L523-.L494)/2
6466 0045 1E .byte (.L493-.L494)/2
6467 .align 1
6468 .L492:
1847:system/core/sdcard/sdcard.c **** case 'u':
1848:system/core/sdcard/sdcard.c **** uid = strtoul(optarg, NULL, 10);
6469 .loc 1 1848 0
6470 0046 5F4D ldr r5, .L525+8
6471 0048 0A22 movs r2, #10
6472 004a 5BF80510 ldr r1, [fp, r5]
6473 004e 0868 ldr r0, [r1, #0]
6474 .LVL771:
6475 0050 0021 movs r1, #0
6476 0052 FFF7FEFF bl strtoul(PLT)
6477 .LVL772:
6478 0056 0546 mov r5, r0
1849:system/core/sdcard/sdcard.c **** break;
6479 .loc 1 1849 0
6480 0058 25E0 b .L521
6481 .LVL773:
6482 .L488:
1850:system/core/sdcard/sdcard.c **** case 'g':
1851:system/core/sdcard/sdcard.c **** gid = strtoul(optarg, NULL, 10);
6483 .loc 1 1851 0
6484 005a 5A4C ldr r4, .L525+8
6485 005c 0021 movs r1, #0
6486 005e 5BF80420 ldr r2, [fp, r4]
6487 0062 1068 ldr r0, [r2, #0]
6488 .LVL774:
6489 0064 0A22 movs r2, #10
6490 0066 FFF7FEFF bl strtoul(PLT)
6491 .LVL775:
6492 006a 0446 mov r4, r0
1852:system/core/sdcard/sdcard.c **** break;
6493 .loc 1 1852 0
6494 006c 1BE0 b .L521
6495 .LVL776:
6496 .L493:
1853:system/core/sdcard/sdcard.c **** case 'w':
1854:system/core/sdcard/sdcard.c **** write_gid = strtoul(optarg, NULL, 10);
6497 .loc 1 1854 0
6498 006e DFF854E1 ldr lr, .L525+8
6499 0072 0021 movs r1, #0
6500 0074 5BF80E20 ldr r2, [fp, lr]
6501 0078 1068 ldr r0, [r2, #0]
6502 .LVL777:
6503 007a 0A22 movs r2, #10
6504 007c FFF7FEFF bl strtoul(PLT)
6505 .LVL778:
ARM GAS /tmp/cc3I8rcL.s page 180
6506 0080 0590 str r0, [sp, #20]
1855:system/core/sdcard/sdcard.c **** break;
6507 .loc 1 1855 0
6508 0082 10E0 b .L521
6509 .LVL779:
6510 .L491:
1856:system/core/sdcard/sdcard.c **** case 't':
1857:system/core/sdcard/sdcard.c **** num_threads = strtoul(optarg, NULL, 10);
6511 .loc 1 1857 0
6512 0084 4F48 ldr r0, .L525+8
6513 .LVL780:
6514 0086 0021 movs r1, #0
6515 0088 0A22 movs r2, #10
6516 008a 5BF80030 ldr r3, [fp, r0]
6517 008e 1868 ldr r0, [r3, #0]
6518 0090 FFF7FEFF bl strtoul(PLT)
6519 .LVL781:
6520 0094 8246 mov sl, r0
1858:system/core/sdcard/sdcard.c **** break;
6521 .loc 1 1858 0
6522 0096 06E0 b .L521
6523 .LVL782:
6524 .L490:
1859:system/core/sdcard/sdcard.c **** case 'd':
1860:system/core/sdcard/sdcard.c **** derive = DERIVE_UNIFIED;
1861:system/core/sdcard/sdcard.c **** break;
1862:system/core/sdcard/sdcard.c **** case 'l':
1863:system/core/sdcard/sdcard.c **** derive = DERIVE_LEGACY;
1864:system/core/sdcard/sdcard.c **** break;
1865:system/core/sdcard/sdcard.c **** case 's':
1866:system/core/sdcard/sdcard.c **** split_perms = true;
6525 .loc 1 1866 0
6526 0098 0126 movs r6, #1
1867:system/core/sdcard/sdcard.c **** break;
6527 .loc 1 1867 0
6528 009a 04E0 b .L521
6529 .LVL783:
6530 .L487:
1860:system/core/sdcard/sdcard.c **** derive = DERIVE_UNIFIED;
6531 .loc 1 1860 0
6532 009c 4FF00209 mov r9, #2
6533 00a0 01E0 b .L521
6534 .L509:
1863:system/core/sdcard/sdcard.c **** derive = DERIVE_LEGACY;
6535 .loc 1 1863 0
6536 00a2 4FF00109 mov r9, #1
6537 .LVL784:
6538 .L521:
1845:system/core/sdcard/sdcard.c **** while ((opt = getopt(argc, argv, "u:g:w:t:dls")) != -1) {
6539 .loc 1 1845 0 discriminator 1
6540 00a6 0698 ldr r0, [sp, #24]
6541 00a8 3A46 mov r2, r7
6542 00aa 0799 ldr r1, [sp, #28]
6543 00ac FFF7FEFF bl getopt(PLT)
6544 .LVL785:
6545 00b0 431C adds r3, r0, #1
6546 00b2 B9D1 bne .L496
ARM GAS /tmp/cc3I8rcL.s page 181
1868:system/core/sdcard/sdcard.c **** case '?':
1869:system/core/sdcard/sdcard.c **** default:
1870:system/core/sdcard/sdcard.c **** return usage();
1871:system/core/sdcard/sdcard.c **** }
1872:system/core/sdcard/sdcard.c **** }
1873:system/core/sdcard/sdcard.c ****
1874:system/core/sdcard/sdcard.c **** for (i = optind; i < argc; i++) {
6547 .loc 1 1874 0
6548 00b4 444A ldr r2, .L525+12
1834:system/core/sdcard/sdcard.c **** const char *dest_path = NULL;
6549 .loc 1 1834 0
6550 00b6 0027 movs r7, #0
1833:system/core/sdcard/sdcard.c **** const char *source_path = NULL;
6551 .loc 1 1833 0
6552 00b8 B846 mov r8, r7
6553 .loc 1 1874 0
6554 00ba 5BF80200 ldr r0, [fp, r2]
6555 .LVL786:
6556 00be 0368 ldr r3, [r0, #0]
6557 .LVL787:
6558 00c0 27E0 b .L497
6559 .LVL788:
6560 .L501:
6561 .LBB697:
1875:system/core/sdcard/sdcard.c **** char* arg = argv[i];
6562 .loc 1 1875 0
6563 00c2 0798 ldr r0, [sp, #28]
6564 00c4 50F82300 ldr r0, [r0, r3, lsl #2]
6565 .LVL789:
1876:system/core/sdcard/sdcard.c **** if (!source_path) {
6566 .loc 1 1876 0
6567 00c8 B8F1000F cmp r8, #0
6568 00cc 1DD0 beq .L510
1877:system/core/sdcard/sdcard.c **** source_path = arg;
1878:system/core/sdcard/sdcard.c **** } else if (!dest_path) {
6569 .loc 1 1878 0
6570 00ce F7B1 cbz r7, .L511
1879:system/core/sdcard/sdcard.c **** dest_path = arg;
1880:system/core/sdcard/sdcard.c **** } else if (!uid) {
6571 .loc 1 1880 0
6572 00d0 35B9 cbnz r5, .L499
1881:system/core/sdcard/sdcard.c **** uid = strtoul(arg, NULL, 10);
6573 .loc 1 1881 0
6574 00d2 2946 mov r1, r5
6575 00d4 0A22 movs r2, #10
6576 00d6 0493 str r3, [sp, #16]
6577 00d8 FFF7FEFF bl strtoul(PLT)
6578 .LVL790:
6579 00dc 0546 mov r5, r0
6580 .LVL791:
6581 00de 06E0 b .L522
6582 .LVL792:
6583 .L499:
1882:system/core/sdcard/sdcard.c **** } else if (!gid) {
6584 .loc 1 1882 0
6585 00e0 3CB9 cbnz r4, .L500
1883:system/core/sdcard/sdcard.c **** gid = strtoul(arg, NULL, 10);
ARM GAS /tmp/cc3I8rcL.s page 182
6586 .loc 1 1883 0
6587 00e2 2146 mov r1, r4
6588 00e4 0A22 movs r2, #10
6589 00e6 0493 str r3, [sp, #16]
6590 00e8 FFF7FEFF bl strtoul(PLT)
6591 .LVL793:
6592 00ec 0446 mov r4, r0
6593 .LVL794:
6594 .L522:
6595 00ee 049B ldr r3, [sp, #16]
6596 00f0 0EE0 b .L498
6597 .LVL795:
6598 .L500:
1884:system/core/sdcard/sdcard.c **** } else {
1885:system/core/sdcard/sdcard.c **** ERROR("too many arguments\n");
6599 .loc 1 1885 0
6600 00f2 DFF8D8C0 ldr ip, .L525+16
6601 00f6 3648 ldr r0, .L525+20
6602 .LVL796:
6603 00f8 5BF80C10 ldr r1, [fp, ip]
6604 .LPIC96:
6605 00fc 7844 add r0, pc
6606 .LVL797:
6607 .L524:
6608 00fe A831 adds r1, r1, #168
6609 0100 FFF7FEFF bl fputs(PLT)
6610 .LVL798:
6611 .L523:
1886:system/core/sdcard/sdcard.c **** return usage();
6612 .loc 1 1886 0
6613 0104 FFF7FEFF bl usage(PLT)
6614 .LVL799:
6615 0108 54E0 b .L495
6616 .LVL800:
6617 .L510:
1877:system/core/sdcard/sdcard.c **** source_path = arg;
6618 .loc 1 1877 0
6619 010a 8046 mov r8, r0
6620 .LVL801:
6621 010c 00E0 b .L498
6622 .LVL802:
6623 .L511:
1879:system/core/sdcard/sdcard.c **** dest_path = arg;
6624 .loc 1 1879 0
6625 010e 0746 mov r7, r0
6626 .LVL803:
6627 .L498:
6628 .LBE697:
1874:system/core/sdcard/sdcard.c **** for (i = optind; i < argc; i++) {
6629 .loc 1 1874 0
6630 0110 0133 adds r3, r3, #1
6631 .LVL804:
6632 .L497:
1874:system/core/sdcard/sdcard.c **** for (i = optind; i < argc; i++) {
6633 .loc 1 1874 0 is_stmt 0 discriminator 1
6634 0112 0699 ldr r1, [sp, #24]
6635 0114 8B42 cmp r3, r1
ARM GAS /tmp/cc3I8rcL.s page 183
6636 0116 D4DB blt .L501
1887:system/core/sdcard/sdcard.c **** }
1888:system/core/sdcard/sdcard.c **** }
1889:system/core/sdcard/sdcard.c ****
1890:system/core/sdcard/sdcard.c **** if (!source_path) {
6637 .loc 1 1890 0 is_stmt 1
6638 0118 B8F1000F cmp r8, #0
6639 011c 05D1 bne .L502
1891:system/core/sdcard/sdcard.c **** ERROR("no source path specified\n");
6640 .loc 1 1891 0
6641 011e 2B4B ldr r3, .L525+16
6642 .LVL805:
6643 0120 2C48 ldr r0, .L525+24
6644 0122 5BF80310 ldr r1, [fp, r3]
6645 .LPIC97:
6646 0126 7844 add r0, pc
6647 0128 E9E7 b .L524
6648 .LVL806:
6649 .L502:
1892:system/core/sdcard/sdcard.c **** return usage();
1893:system/core/sdcard/sdcard.c **** }
1894:system/core/sdcard/sdcard.c **** if (!dest_path) {
6650 .loc 1 1894 0
6651 012a 2FB9 cbnz r7, .L503
1895:system/core/sdcard/sdcard.c **** ERROR("no dest path specified\n");
6652 .loc 1 1895 0
6653 012c 2749 ldr r1, .L525+16
6654 012e 2A48 ldr r0, .L525+28
6655 0130 5BF80110 ldr r1, [fp, r1]
6656 .LPIC98:
6657 0134 7844 add r0, pc
6658 0136 E2E7 b .L524
6659 .L503:
1896:system/core/sdcard/sdcard.c **** return usage();
1897:system/core/sdcard/sdcard.c **** }
1898:system/core/sdcard/sdcard.c **** if (!uid || !gid) {
6660 .loc 1 1898 0
6661 0138 05B1 cbz r5, .L504
6662 .loc 1 1898 0 is_stmt 0 discriminator 1
6663 013a 2CB9 cbnz r4, .L505
6664 .L504:
1899:system/core/sdcard/sdcard.c **** ERROR("uid and gid must be nonzero\n");
6665 .loc 1 1899 0 is_stmt 1
6666 013c 234A ldr r2, .L525+16
6667 013e 2748 ldr r0, .L525+32
6668 0140 5BF80210 ldr r1, [fp, r2]
6669 .LPIC99:
6670 0144 7844 add r0, pc
6671 0146 DAE7 b .L524
6672 .L505:
1900:system/core/sdcard/sdcard.c **** return usage();
1901:system/core/sdcard/sdcard.c **** }
1902:system/core/sdcard/sdcard.c **** if (num_threads < 1) {
6673 .loc 1 1902 0
6674 0148 BAF1000F cmp sl, #0
6675 014c 06DC bgt .L506
1903:system/core/sdcard/sdcard.c **** ERROR("number of threads must be at least 1\n");
ARM GAS /tmp/cc3I8rcL.s page 184
6676 .loc 1 1903 0
6677 014e DFF87CE0 ldr lr, .L525+16
6678 0152 2348 ldr r0, .L525+36
6679 0154 5BF80E10 ldr r1, [fp, lr]
6680 .LPIC100:
6681 0158 7844 add r0, pc
6682 015a D0E7 b .L524
6683 .L506:
1904:system/core/sdcard/sdcard.c **** return usage();
1905:system/core/sdcard/sdcard.c **** }
1906:system/core/sdcard/sdcard.c **** if (split_perms && derive == DERIVE_NONE) {
6684 .loc 1 1906 0
6685 015c 4EB1 cbz r6, .L507
6686 .loc 1 1906 0 is_stmt 0 discriminator 1
6687 015e B9F1000F cmp r9, #0
6688 0162 06D1 bne .L507
1907:system/core/sdcard/sdcard.c **** ERROR("cannot split permissions without deriving\n");
6689 .loc 1 1907 0 is_stmt 1
6690 0164 DFF864C0 ldr ip, .L525+16
6691 0168 1E48 ldr r0, .L525+40
6692 016a 5BF80C10 ldr r1, [fp, ip]
6693 .LPIC101:
6694 016e 7844 add r0, pc
6695 0170 C5E7 b .L524
6696 .L507:
1908:system/core/sdcard/sdcard.c **** return usage();
1909:system/core/sdcard/sdcard.c **** }
1910:system/core/sdcard/sdcard.c ****
1911:system/core/sdcard/sdcard.c **** rlim.rlim_cur = 8192;
6697 .loc 1 1911 0
6698 0172 4FF40053 mov r3, #8192
6699 .LVL807:
1912:system/core/sdcard/sdcard.c **** rlim.rlim_max = 8192;
1913:system/core/sdcard/sdcard.c **** if (setrlimit(RLIMIT_NOFILE, &rlim)) {
6700 .loc 1 1913 0
6701 0176 0720 movs r0, #7
6702 0178 08A9 add r1, sp, #32
1911:system/core/sdcard/sdcard.c **** rlim.rlim_cur = 8192;
6703 .loc 1 1911 0
6704 017a 0893 str r3, [sp, #32]
1912:system/core/sdcard/sdcard.c **** rlim.rlim_max = 8192;
6705 .loc 1 1912 0
6706 017c 0993 str r3, [sp, #36]
6707 .loc 1 1913 0
6708 017e FFF7FEFF bl setrlimit(PLT)
6709 .LVL808:
6710 0182 50B1 cbz r0, .L508
1914:system/core/sdcard/sdcard.c **** ERROR("Error setting RLIMIT_NOFILE, errno = %d\n", errno);
6711 .loc 1 1914 0
6712 0184 FFF7FEFF bl __errno(PLT)
6713 .LVL809:
6714 0188 0268 ldr r2, [r0, #0]
6715 018a 1048 ldr r0, .L525+16
6716 018c 1649 ldr r1, .L525+44
6717 018e 5BF80000 ldr r0, [fp, r0]
6718 .LPIC102:
6719 0192 7944 add r1, pc
ARM GAS /tmp/cc3I8rcL.s page 185
6720 0194 A830 adds r0, r0, #168
6721 0196 FFF7FEFF bl fprintf(PLT)
6722 .LVL810:
6723 .L508:
1915:system/core/sdcard/sdcard.c **** }
1916:system/core/sdcard/sdcard.c ****
1917:system/core/sdcard/sdcard.c **** res = run(source_path, dest_path, uid, gid, write_gid, num_threads, derive, split_perms);
6724 .loc 1 1917 0
6725 019a 059B ldr r3, [sp, #20]
6726 019c CDF80890 str r9, [sp, #8]
6727 01a0 4046 mov r0, r8
6728 01a2 0396 str r6, [sp, #12]
6729 01a4 3946 mov r1, r7
6730 01a6 2A46 mov r2, r5
6731 01a8 8DE80804 stmia sp, {r3, sl}
6732 01ac 2346 mov r3, r4
6733 01ae FFF7FEFF bl run(PLT)
6734 .LVL811:
1918:system/core/sdcard/sdcard.c **** return res < 0 ? 1 : 0;
6735 .loc 1 1918 0
6736 01b2 C00F lsrs r0, r0, #31
6737 .LVL812:
6738 .L495:
1919:system/core/sdcard/sdcard.c **** }
6739 .loc 1 1919 0
6740 01b4 0BB0 add sp, sp, #44
6741 01b6 BDE8F08F pop {r4, r5, r6, r7, r8, r9, sl, fp, pc}
6742 .L526:
6743 01ba 00BF .align 2
6744 .L525:
6745 01bc 98010000 .word _GLOBAL_OFFSET_TABLE_-(.LPIC94+4)
6746 01c0 98010000 .word .LC48-(.LPIC95+4)
6747 01c4 00000000 .word optarg(GOT)
6748 01c8 00000000 .word optind(GOT)
6749 01cc 00000000 .word __sF(GOT)
6750 01d0 D0000000 .word .LC49-(.LPIC96+4)
6751 01d4 AA000000 .word .LC50-(.LPIC97+4)
6752 01d8 A0000000 .word .LC51-(.LPIC98+4)
6753 01dc 94000000 .word .LC52-(.LPIC99+4)
6754 01e0 84000000 .word .LC53-(.LPIC100+4)
6755 01e4 72000000 .word .LC54-(.LPIC101+4)
6756 01e8 52000000 .word .LC55-(.LPIC102+4)
6757 .cfi_endproc
6758 .LFE120:
6759 .fnend
6761 .section .rodata.kGroups,"a",%progbits
6762 .align 2
6763 .LANCHOR0 = . + 0
6766 kGroups:
6767 0000 08040000 .word 1032
6768 .section .rodata.str1.1,"aMS",%progbits,1
6769 .LC0:
6770 0000 75736167 .ascii "usage: sdcard [OPTIONS] <source_path> <dest_path>\012"
6770 653A2073
6770 64636172
6770 64205B4F
6770 5054494F
ARM GAS /tmp/cc3I8rcL.s page 186
6771 0032 20202020 .ascii " -u: specify UID to run as\012 -g: specify GI"
6771 2D753A20
6771 73706563
6771 69667920
6771 55494420
6772 0062 4420746F .ascii "D to run as\012 -w: specify GID required to writ"
6772 2072756E
6772 2061730A
6772 20202020
6772 2D773A20
6773 0092 65202864 .ascii "e (default sdcard_rw)\012 -t: specify number of "
6773 65666175
6773 6C742073
6773 64636172
6773 645F7277
6774 00c2 74687265 .ascii "threads to use (default %d)\012 -d: derive file "
6774 61647320
6774 746F2075
6774 73652028
6774 64656661
6775 00f2 7065726D .ascii "permissions based on path\012 -l: derive file pe"
6775 69737369
6775 6F6E7320
6775 62617365
6775 64206F6E
6776 0122 726D6973 .ascii "rmissions based on legacy internal layout\012 -s"
6776 73696F6E
6776 73206261
6776 73656420
6776 6F6E206C
6777 0152 3A207370 .ascii ": split derived permissions for pics, av (requires "
6777 6C697420
6777 64657269
6777 76656420
6777 7065726D
6778 0185 2D64206F .ascii "-d or -l)\012\012\000"
6778 72202D6C
6778 290A0A00
6779 .LC1:
6780 0191 6175746F .ascii "autorun.inf\000"
6780 72756E2E
6780 696E6600
6781 .LC2:
6782 019d 2E616E64 .ascii ".android_secure\000"
6782 726F6964
6782 5F736563
6782 75726500
6783 .LC3:
6784 01ad 616E6472 .ascii "android_secure\000"
6784 6F69645F
6784 73656375
6784 726500
6785 .LC4:
6786 01bc 2A2A2A20 .ascii "*** REPLY FAILED *** %d\012\000"
6786 5245504C
6786 59204641
6786 494C4544
ARM GAS /tmp/cc3I8rcL.s page 187
6786 202A2A2A
6787 .LC5:
6788 01d5 5A65726F .ascii "Zero refcnt %p\012\000"
6788 20726566
6788 636E7420
6788 25700A00
6789 .LC6:
6790 01e5 4661696C .ascii "Failed to open(%s): %s\012\000"
6790 65642074
6790 6F206F70
6790 656E2825
6790 73293A20
6791 .LC7:
6792 01fd 6F70656E .ascii "opendir %s failed: %s\012\000"
6792 64697220
6792 25732066
6792 61696C65
6792 643A2025
6793 .LC8:
6794 0214 416E6472 .ascii "Android\000"
6794 6F696400
6795 .LC9:
6796 021c 4443494D .ascii "DCIM\000"
6796 00
6797 .LC10:
6798 0221 50696374 .ascii "Pictures\000"
6798 75726573
6798 00
6799 .LC11:
6800 022a 416C6172 .ascii "Alarms\000"
6800 6D7300
6801 .LC12:
6802 0231 4D6F7669 .ascii "Movies\000"
6802 657300
6803 .LC13:
6804 0238 4D757369 .ascii "Music\000"
6804 6300
6805 .LC14:
6806 023e 4E6F7469 .ascii "Notifications\000"
6806 66696361
6806 74696F6E
6806 7300
6807 .LC15:
6808 024c 506F6463 .ascii "Podcasts\000"
6808 61737473
6808 00
6809 .LC16:
6810 0255 52696E67 .ascii "Ringtones\000"
6810 746F6E65
6810 7300
6811 .LC17:
6812 025f 64617461 .ascii "data\000"
6812 00
6813 .LC18:
6814 0264 6F626200 .ascii "obb\000"
6815 .LC19:
6816 0268 75736572 .ascii "user\000"
ARM GAS /tmp/cc3I8rcL.s page 188
6816 00
6817 .LC20:
6818 026d 25732F2E .ascii "%s/.nomedia\000"
6818 6E6F6D65
6818 64696100
6819 .LC21:
6820 0279 4661696C .ascii "Failed to touch(%s): %s\012\000"
6820 65642074
6820 6F20746F
6820 75636828
6820 2573293A
6821 .LC22:
6822 0292 5B25645D .ascii "[%d] handle_fuse_requests: errno=%d\012\000"
6822 2068616E
6822 646C655F
6822 66757365
6822 5F726571
6823 .LC23:
6824 02b7 5B25645D .ascii "[%d] request too short: len=%zu\012\000"
6824 20726571
6824 75657374
6824 20746F6F
6824 2073686F
6825 .LC24:
6826 02d8 5B25645D .ascii "[%d] malformed header: len=%zu, hdr->len=%u\012\000"
6826 206D616C
6826 666F726D
6826 65642068
6826 65616465
6827 .LC25:
6828 0305 2F646576 .ascii "/dev/fuse\000"
6828 2F667573
6828 6500
6829 .LC26:
6830 030f 63616E6E .ascii "cannot open fuse device: %s\012\000"
6830 6F74206F
6830 70656E20
6830 66757365
6830 20646576
6831 .LC27:
6832 032c 66643D25 .ascii "fd=%i,rootmode=40000,default_permissions,allow_othe"
6832 692C726F
6832 6F746D6F
6832 64653D34
6832 30303030
6833 035f 722C7573 .ascii "r,user_id=%d,group_id=%d\000"
6833 65725F69
6833 643D2564
6833 2C67726F
6833 75705F69
6834 .LC28:
6835 0378 66757365 .ascii "fuse\000"
6835 00
6836 .LC29:
6837 037d 63616E6E .ascii "cannot mount fuse filesystem: %s\012\000"
6837 6F74206D
6837 6F756E74
ARM GAS /tmp/cc3I8rcL.s page 189
6837 20667573
6837 65206669
6838 .LC30:
6839 039f 63616E6E .ascii "cannot setgroups: %s\012\000"
6839 6F742073
6839 65746772
6839 6F757073
6839 3A202573
6840 .LC31:
6841 03b5 63616E6E .ascii "cannot setgid: %s\012\000"
6841 6F742073
6841 65746769
6841 643A2025
6841 730A00
6842 .LC32:
6843 03c8 63616E6E .ascii "cannot setuid: %s\012\000"
6843 6F742073
6843 65747569
6843 643A2025
6843 730A00
6844 .LC33:
6845 03db 25732F6F .ascii "%s/obb\000"
6845 626200
6846 .LC34:
6847 03e2 25732F41 .ascii "%s/Android/obb\000"
6847 6E64726F
6847 69642F6F
6847 626200
6848 .LC35:
6849 03f1 63616E6E .ascii "cannot allocate storage for threads\012\000"
6849 6F742061
6849 6C6C6F63
6849 61746520
6849 73746F72
6850 .LC36:
6851 0416 6661696C .ascii "failed to start thread #%d, error=%d\012\000"
6851 65642074
6851 6F207374
6851 61727420
6851 74687265
6852 .LC37:
6853 043c 696E6F74 .ascii "inotify_init failed: %s\012\000"
6853 6966795F
6853 696E6974
6853 20666169
6853 6C65643A
6854 .LC38:
6855 0455 2F646174 .ascii "/data/system/packages.list\000"
6855 612F7379
6855 7374656D
6855 2F706163
6855 6B616765
6856 .LC39:
6857 0470 6D697373 .ascii "missing packages.list; retrying\012\000"
6857 696E6720
6857 7061636B
6857 61676573
ARM GAS /tmp/cc3I8rcL.s page 190
6857 2E6C6973
6858 .LC40:
6859 0491 696E6F74 .ascii "inotify_add_watch failed: %s\012\000"
6859 6966795F
6859 6164645F
6859 77617463
6859 68206661
6860 .LC41:
6861 04af 7200 .ascii "r\000"
6862 .LC42:
6863 04b1 6661696C .ascii "failed to open package list: %s\012\000"
6863 65642074
6863 6F206F70
6863 656E2070
6863 61636B61
6864 .LC43:
6865 04d2 25732025 .ascii "%s %d %*d %*s %*s %s\000"
6865 6420252A
6865 6420252A
6865 7320252A
6865 73202573
6866 .LC44:
6867 04e7 2C00 .ascii ",\000"
6868 .LC45:
6869 04e9 72656164 .ascii "read_package_list failed: %s\012\000"
6869 5F706163
6869 6B616765
6869 5F6C6973
6869 74206661
6870 .LC46:
6871 0507 6661696C .ascii "failed to read inotify event: %s\012\000"
6871 65642074
6871 6F207265
6871 61642069
6871 6E6F7469
6872 .LC47:
6873 0529 7465726D .ascii "terminated prematurely\012\000"
6873 696E6174
6873 65642070
6873 72656D61
6873 74757265
6874 .LC48:
6875 0541 753A673A .ascii "u:g:w:t:dls\000"
6875 773A743A
6875 646C7300
6876 .LC49:
6877 054d 746F6F20 .ascii "too many arguments\012\000"
6877 6D616E79
6877 20617267
6877 756D656E
6877 74730A00
6878 .LC50:
6879 0561 6E6F2073 .ascii "no source path specified\012\000"
6879 6F757263
6879 65207061
6879 74682073
6879 70656369
ARM GAS /tmp/cc3I8rcL.s page 191
6880 .LC51:
6881 057b 6E6F2064 .ascii "no dest path specified\012\000"
6881 65737420
6881 70617468
6881 20737065
6881 63696669
6882 .LC52:
6883 0593 75696420 .ascii "uid and gid must be nonzero\012\000"
6883 616E6420
6883 67696420
6883 6D757374
6883 20626520
6884 .LC53:
6885 05b0 6E756D62 .ascii "number of threads must be at least 1\012\000"
6885 6572206F
6885 66207468
6885 72656164
6885 73206D75
6886 .LC54:
6887 05d6 63616E6E .ascii "cannot split permissions without deriving\012\000"
6887 6F742073
6887 706C6974
6887 20706572
6887 6D697373
6888 .LC55:
6889 0601 4572726F .ascii "Error setting RLIMIT_NOFILE, errno = %d\012\000"
6889 72207365
6889 7474696E
6889 6720524C
6889 494D4954
6890 .text
6891 .Letext0:
6892 .file 6 "/home/rod/android/system/prebuilts/gcc/linux-x86/arm/arm-linux-androideabi-4.7/bin/../lib
6893 .file 7 "bionic/libc/arch-arm/include/machine/_types.h"
6894 .file 8 "bionic/libc/include/stdint.h"
6895 .file 9 "bionic/libc/kernel/arch-arm/asm/posix_types.h"
6896 .file 10 "bionic/libc/kernel/arch-arm/asm/types.h"
6897 .file 11 "bionic/libc/include/sys/types.h"
6898 .file 12 "bionic/libc/kernel/common/linux/time.h"
6899 .file 13 "bionic/libc/include/sys/vfs.h"
6900 .file 14 "bionic/libc/kernel/common/linux/uio.h"
6901 .file 15 "bionic/libc/include/dirent.h"
6902 .file 16 "bionic/libc/include/pthread.h"
6903 .file 17 "bionic/libc/kernel/common/linux/resource.h"
6904 .file 18 "bionic/libc/kernel/common/linux/inotify.h"
6905 .file 19 "system/core/include/cutils/hashmap.h"
6906 .file 20 "system/core/include/cutils/multiuser.h"
6907 .file 21 "system/core/include/private/android_filesystem_config.h"
6908 .file 22 "system/core/sdcard/fuse.h"
6909 .file 23 "bionic/libc/include/unistd.h"
6910 .file 24 "bionic/libc/include/ctype.h"
6911 .file 25 "bionic/libc/include/strings.h"
6912 .file 26 "bionic/libc/include/sys/uio.h"
6913 .file 27 "<built-in>"
6914 .file 28 "bionic/libc/include/malloc.h"
6915 .file 29 "bionic/libc/include/stdlib.h"
6916 .file 30 "bionic/libc/include/errno.h"
ARM GAS /tmp/cc3I8rcL.s page 192
6917 .file 31 "system/core/include/cutils/fs.h"
6918 .file 32 "bionic/libc/include/sys/inotify.h"
6919 .file 33 "bionic/libc/include/sys/mount.h"
6920 .file 34 "bionic/libc/include/sys/resource.h"
ARM GAS /tmp/cc3I8rcL.s page 193
DEFINED SYMBOLS
*ABS*:0000000000000000 sdcard.c
/tmp/cc3I8rcL.s:20 .text.int_hash:0000000000000000 $t
/tmp/cc3I8rcL.s:24 .text.int_hash:0000000000000000 int_hash
.ARM.exidx.text.int_hash:0000000000000000 $d
/tmp/cc3I8rcL.s:41 .text.int_equals:0000000000000000 $t
/tmp/cc3I8rcL.s:45 .text.int_equals:0000000000000000 int_equals
.ARM.exidx.text.int_equals:0000000000000000 $d
/tmp/cc3I8rcL.s:65 .text.usage:0000000000000000 $t
/tmp/cc3I8rcL.s:69 .text.usage:0000000000000000 usage
/tmp/cc3I8rcL.s:104 .text.usage:000000000000001c $d
/tmp/cc3I8rcL.s:6769 .rodata.str1.1:0000000000000000 .LC0
.ARM.extab.text.usage:0000000000000000 $d
.ARM.exidx.text.usage:0000000000000000 $d
/tmp/cc3I8rcL.s:112 .text.str_icase_equals:0000000000000000 $t
/tmp/cc3I8rcL.s:116 .text.str_icase_equals:0000000000000000 str_icase_equals
.ARM.extab.text.str_icase_equals:0000000000000000 $d
.ARM.exidx.text.str_icase_equals:0000000000000000 $d
/tmp/cc3I8rcL.s:143 .text.str_hash:0000000000000000 $t
/tmp/cc3I8rcL.s:147 .text.str_hash:0000000000000000 str_hash
.ARM.exidx.text.str_hash:0000000000000000 $d
/tmp/cc3I8rcL.s:185 .text.get_node_path_locked:0000000000000000 $t
/tmp/cc3I8rcL.s:189 .text.get_node_path_locked:0000000000000000 get_node_path_locked
.ARM.exidx.text.get_node_path_locked:0000000000000000 $d
/tmp/cc3I8rcL.s:292 .text.remove_int_to_null:0000000000000000 $t
/tmp/cc3I8rcL.s:296 .text.remove_int_to_null:0000000000000000 remove_int_to_null
.ARM.extab.text.remove_int_to_null:0000000000000000 $d
.ARM.exidx.text.remove_int_to_null:0000000000000000 $d
/tmp/cc3I8rcL.s:325 .text.remove_str_to_int:0000000000000000 $t
/tmp/cc3I8rcL.s:329 .text.remove_str_to_int:0000000000000000 remove_str_to_int
.ARM.exidx.text.remove_str_to_int:0000000000000000 $d
/tmp/cc3I8rcL.s:364 .text.check_caller_access_to_name:0000000000000000 $t
/tmp/cc3I8rcL.s:368 .text.check_caller_access_to_name:0000000000000000 check_caller_access_to_name
/tmp/cc3I8rcL.s:465 .text.check_caller_access_to_name:0000000000000064 $d
/tmp/cc3I8rcL.s:6779 .rodata.str1.1:0000000000000191 .LC1
/tmp/cc3I8rcL.s:6781 .rodata.str1.1:000000000000019d .LC2
/tmp/cc3I8rcL.s:6783 .rodata.str1.1:00000000000001ad .LC3
.ARM.exidx.text.check_caller_access_to_name:0000000000000000 $d
/tmp/cc3I8rcL.s:473 .text.fuse_reply:0000000000000000 $t
/tmp/cc3I8rcL.s:477 .text.fuse_reply:0000000000000000 fuse_reply
/tmp/cc3I8rcL.s:563 .text.fuse_reply:0000000000000050 $d
/tmp/cc3I8rcL.s:6785 .rodata.str1.1:00000000000001bc .LC4
.ARM.exidx.text.fuse_reply:0000000000000000 $d
/tmp/cc3I8rcL.s:571 .text.release_node_locked:0000000000000000 $t
/tmp/cc3I8rcL.s:575 .text.release_node_locked:0000000000000000 release_node_locked
/tmp/cc3I8rcL.s:684 .text.remove_node_from_parent_locked:0000000000000000 remove_node_from_parent_locked
/tmp/cc3I8rcL.s:672 .text.release_node_locked:0000000000000058 $d
/tmp/cc3I8rcL.s:6787 .rodata.str1.1:00000000000001d5 .LC5
.ARM.exidx.text.release_node_locked:0000000000000000 $d
/tmp/cc3I8rcL.s:680 .text.remove_node_from_parent_locked:0000000000000000 $t
.ARM.exidx.text.remove_node_from_parent_locked:0000000000000000 $d
/tmp/cc3I8rcL.s:745 .text.get_caller_has_rw_locked:0000000000000000 $t
/tmp/cc3I8rcL.s:749 .text.get_caller_has_rw_locked:0000000000000000 get_caller_has_rw_locked
.ARM.exidx.text.get_caller_has_rw_locked:0000000000000000 $d
/tmp/cc3I8rcL.s:806 .text.handle_statfs.isra.19:0000000000000000 $t
/tmp/cc3I8rcL.s:810 .text.handle_statfs.isra.19:0000000000000000 handle_statfs.isra.19
/tmp/cc3I8rcL.s:965 .text.handle_statfs.isra.19:00000000000000c8 $d
ARM GAS /tmp/cc3I8rcL.s page 194
.ARM.extab.text.handle_statfs.isra.19:0000000000000000 $d
.ARM.exidx.text.handle_statfs.isra.19:0000000000000000 $d
/tmp/cc3I8rcL.s:972 .text.handle_readdir.isra.21:0000000000000000 $t
/tmp/cc3I8rcL.s:976 .text.handle_readdir.isra.21:0000000000000000 handle_readdir.isra.21
/tmp/cc3I8rcL.s:1177 .text.handle_readdir.isra.21:00000000000000e8 $d
.ARM.extab.text.handle_readdir.isra.21:0000000000000000 $d
.ARM.exidx.text.handle_readdir.isra.21:0000000000000000 $d
/tmp/cc3I8rcL.s:1186 .text.touch.constprop.26:0000000000000000 $t
/tmp/cc3I8rcL.s:1190 .text.touch.constprop.26:0000000000000000 touch.constprop.26
/tmp/cc3I8rcL.s:1285 .text.touch.constprop.26:0000000000000048 $d
/tmp/cc3I8rcL.s:6789 .rodata.str1.1:00000000000001e5 .LC6
.ARM.exidx.text.touch.constprop.26:0000000000000000 $d
/tmp/cc3I8rcL.s:1293 .text.find_file_within.constprop.27:0000000000000000 $t
/tmp/cc3I8rcL.s:1297 .text.find_file_within.constprop.27:0000000000000000 find_file_within.constprop.27
/tmp/cc3I8rcL.s:1480 .text.find_file_within.constprop.27:00000000000000b8 $d
/tmp/cc3I8rcL.s:6791 .rodata.str1.1:00000000000001fd .LC7
.ARM.exidx.text.find_file_within.constprop.27:0000000000000000 $d
/tmp/cc3I8rcL.s:1488 .text.lookup_node_and_path_by_id_locked.constprop.28:0000000000000000 $t
/tmp/cc3I8rcL.s:1492 .text.lookup_node_and_path_by_id_locked.constprop.28:0000000000000000 lookup_node_and_path_by_id_locked.constprop.28
.ARM.exidx.text.lookup_node_and_path_by_id_locked.constprop.28:0000000000000000 $d
/tmp/cc3I8rcL.s:1549 .text.handle_rmdir.isra.16:0000000000000000 $t
/tmp/cc3I8rcL.s:1553 .text.handle_rmdir.isra.16:0000000000000000 handle_rmdir.isra.16
/tmp/cc3I8rcL.s:1688 .text.handle_rmdir.isra.16:00000000000000bc $d
.ARM.extab.text.handle_rmdir.isra.16:0000000000000000 $d
.ARM.exidx.text.handle_rmdir.isra.16:0000000000000000 $d
/tmp/cc3I8rcL.s:1695 .text.handle_unlink.isra.15:0000000000000000 $t
/tmp/cc3I8rcL.s:1699 .text.handle_unlink.isra.15:0000000000000000 handle_unlink.isra.15
/tmp/cc3I8rcL.s:1834 .text.handle_unlink.isra.15:00000000000000bc $d
.ARM.extab.text.handle_unlink.isra.15:0000000000000000 $d
.ARM.exidx.text.handle_unlink.isra.15:0000000000000000 $d
/tmp/cc3I8rcL.s:1841 .text.handle_open.isra.14:0000000000000000 $t
/tmp/cc3I8rcL.s:1845 .text.handle_open.isra.14:0000000000000000 handle_open.isra.14
/tmp/cc3I8rcL.s:2062 .text.handle_open.isra.14:00000000000000f4 $d
.ARM.extab.text.handle_open.isra.14:0000000000000000 $d
.ARM.exidx.text.handle_open.isra.14:0000000000000000 $d
/tmp/cc3I8rcL.s:2069 .text.handle_opendir.isra.10:0000000000000000 $t
/tmp/cc3I8rcL.s:2073 .text.handle_opendir.isra.10:0000000000000000 handle_opendir.isra.10
/tmp/cc3I8rcL.s:2243 .text.handle_opendir.isra.10:00000000000000cc $d
.ARM.extab.text.handle_opendir.isra.10:0000000000000000 $d
.ARM.exidx.text.handle_opendir.isra.10:0000000000000000 $d
/tmp/cc3I8rcL.s:2250 .text.fuse_reply_attr:0000000000000000 $t
/tmp/cc3I8rcL.s:2254 .text.fuse_reply_attr:0000000000000000 fuse_reply_attr
.ARM.exidx.text.fuse_reply_attr:0000000000000000 $d
/tmp/cc3I8rcL.s:2440 .text.handle_getattr.isra.5:0000000000000000 $t
/tmp/cc3I8rcL.s:2444 .text.handle_getattr.isra.5:0000000000000000 handle_getattr.isra.5
/tmp/cc3I8rcL.s:2557 .text.handle_getattr.isra.5:0000000000000090 $d
.ARM.extab.text.handle_getattr.isra.5:0000000000000000 $d
.ARM.exidx.text.handle_getattr.isra.5:0000000000000000 $d
/tmp/cc3I8rcL.s:2564 .text.handle_setattr.isra.13:0000000000000000 $t
/tmp/cc3I8rcL.s:2568 .text.handle_setattr.isra.13:0000000000000000 handle_setattr.isra.13
/tmp/cc3I8rcL.s:2762 .text.handle_setattr.isra.13:0000000000000100 $d
.ARM.extab.text.handle_setattr.isra.13:0000000000000000 $d
.ARM.exidx.text.handle_setattr.isra.13:0000000000000000 $d
/tmp/cc3I8rcL.s:2770 .text.handle_rename.isra.17:0000000000000000 $t
/tmp/cc3I8rcL.s:2774 .text.handle_rename.isra.17:0000000000000000 handle_rename.isra.17
/tmp/cc3I8rcL.s:3223 .text.handle_rename.isra.17:000000000000023c $d
.ARM.extab.text.handle_rename.isra.17:0000000000000000 $d
ARM GAS /tmp/cc3I8rcL.s page 195
.ARM.exidx.text.handle_rename.isra.17:0000000000000000 $d
/tmp/cc3I8rcL.s:3230 .text.create_node_locked:0000000000000000 $t
/tmp/cc3I8rcL.s:3235 .text.create_node_locked:0000000000000000 create_node_locked
/tmp/cc3I8rcL.s:3410 .text.create_node_locked:00000000000000be $d
/tmp/cc3I8rcL.s:3416 .text.create_node_locked:00000000000000c4 $t
/tmp/cc3I8rcL.s:3709 .text.create_node_locked:0000000000000210 $d
/tmp/cc3I8rcL.s:6793 .rodata.str1.1:0000000000000214 .LC8
/tmp/cc3I8rcL.s:6795 .rodata.str1.1:000000000000021c .LC9
/tmp/cc3I8rcL.s:6797 .rodata.str1.1:0000000000000221 .LC10
/tmp/cc3I8rcL.s:6799 .rodata.str1.1:000000000000022a .LC11
/tmp/cc3I8rcL.s:6801 .rodata.str1.1:0000000000000231 .LC12
/tmp/cc3I8rcL.s:6803 .rodata.str1.1:0000000000000238 .LC13
/tmp/cc3I8rcL.s:6805 .rodata.str1.1:000000000000023e .LC14
/tmp/cc3I8rcL.s:6807 .rodata.str1.1:000000000000024c .LC15
/tmp/cc3I8rcL.s:6809 .rodata.str1.1:0000000000000255 .LC16
/tmp/cc3I8rcL.s:6811 .rodata.str1.1:000000000000025f .LC17
/tmp/cc3I8rcL.s:6813 .rodata.str1.1:0000000000000264 .LC18
/tmp/cc3I8rcL.s:6815 .rodata.str1.1:0000000000000268 .LC19
.ARM.exidx.text.create_node_locked:0000000000000000 $d
/tmp/cc3I8rcL.s:3728 .text.fuse_reply_entry:0000000000000000 $t
/tmp/cc3I8rcL.s:3732 .text.fuse_reply_entry:0000000000000000 fuse_reply_entry
.ARM.extab.text.fuse_reply_entry:0000000000000000 $d
.ARM.exidx.text.fuse_reply_entry:0000000000000000 $d
/tmp/cc3I8rcL.s:3995 .text.handle_lookup.isra.22:0000000000000000 $t
/tmp/cc3I8rcL.s:3999 .text.handle_lookup.isra.22:0000000000000000 handle_lookup.isra.22
/tmp/cc3I8rcL.s:4127 .text.handle_lookup.isra.22:00000000000000b8 $d
.ARM.extab.text.handle_lookup.isra.22:0000000000000000 $d
.ARM.exidx.text.handle_lookup.isra.22:0000000000000000 $d
/tmp/cc3I8rcL.s:4134 .text.handle_mknod.isra.23:0000000000000000 $t
/tmp/cc3I8rcL.s:4138 .text.handle_mknod.isra.23:0000000000000000 handle_mknod.isra.23
/tmp/cc3I8rcL.s:4298 .text.handle_mknod.isra.23:00000000000000e4 $d
.ARM.extab.text.handle_mknod.isra.23:0000000000000000 $d
.ARM.exidx.text.handle_mknod.isra.23:0000000000000000 $d
/tmp/cc3I8rcL.s:4305 .text.handle_mkdir.isra.24:0000000000000000 $t
/tmp/cc3I8rcL.s:4309 .text.handle_mkdir.isra.24:0000000000000000 handle_mkdir.isra.24
/tmp/cc3I8rcL.s:4579 .text.handle_mkdir.isra.24:0000000000000188 $d
/tmp/cc3I8rcL.s:6817 .rodata.str1.1:000000000000026d .LC20
/tmp/cc3I8rcL.s:6819 .rodata.str1.1:0000000000000279 .LC21
.ARM.extab.text.handle_mkdir.isra.24:0000000000000000 $d
.ARM.exidx.text.handle_mkdir.isra.24:0000000000000000 $d
/tmp/cc3I8rcL.s:4593 .text.handle_fuse_requests:0000000000000000 $t
/tmp/cc3I8rcL.s:4597 .text.handle_fuse_requests:0000000000000000 handle_fuse_requests
/tmp/cc3I8rcL.s:4742 .text.handle_fuse_requests:0000000000000096 $d
/tmp/cc3I8rcL.s:4775 .text.handle_fuse_requests:00000000000000d0 $t
/tmp/cc3I8rcL.s:5246 .text.handle_fuse_requests:00000000000002a8 $d
/tmp/cc3I8rcL.s:6821 .rodata.str1.1:0000000000000292 .LC22
/tmp/cc3I8rcL.s:6825 .rodata.str1.1:00000000000002d8 .LC24
/tmp/cc3I8rcL.s:6823 .rodata.str1.1:00000000000002b7 .LC23
.ARM.extab.text.handle_fuse_requests:0000000000000000 $d
.ARM.exidx.text.handle_fuse_requests:0000000000000000 $d
/tmp/cc3I8rcL.s:5262 .text.run:0000000000000000 $t
/tmp/cc3I8rcL.s:5266 .text.run:0000000000000000 run
/tmp/cc3I8rcL.s:6308 .text.run:0000000000000534 $d
/tmp/cc3I8rcL.s:6827 .rodata.str1.1:0000000000000305 .LC25
/tmp/cc3I8rcL.s:6829 .rodata.str1.1:000000000000030f .LC26
/tmp/cc3I8rcL.s:6831 .rodata.str1.1:000000000000032c .LC27
/tmp/cc3I8rcL.s:6834 .rodata.str1.1:0000000000000378 .LC28
ARM GAS /tmp/cc3I8rcL.s page 196
/tmp/cc3I8rcL.s:6836 .rodata.str1.1:000000000000037d .LC29
/tmp/cc3I8rcL.s:6838 .rodata.str1.1:000000000000039f .LC30
/tmp/cc3I8rcL.s:6840 .rodata.str1.1:00000000000003b5 .LC31
/tmp/cc3I8rcL.s:6842 .rodata.str1.1:00000000000003c8 .LC32
/tmp/cc3I8rcL.s:6844 .rodata.str1.1:00000000000003db .LC33
/tmp/cc3I8rcL.s:6846 .rodata.str1.1:00000000000003e2 .LC34
/tmp/cc3I8rcL.s:6848 .rodata.str1.1:00000000000003f1 .LC35
/tmp/cc3I8rcL.s:6357 .text.start_handler:0000000000000000 start_handler
/tmp/cc3I8rcL.s:6850 .rodata.str1.1:0000000000000416 .LC36
/tmp/cc3I8rcL.s:6852 .rodata.str1.1:000000000000043c .LC37
/tmp/cc3I8rcL.s:6854 .rodata.str1.1:0000000000000455 .LC38
/tmp/cc3I8rcL.s:6856 .rodata.str1.1:0000000000000470 .LC39
/tmp/cc3I8rcL.s:6858 .rodata.str1.1:0000000000000491 .LC40
/tmp/cc3I8rcL.s:6860 .rodata.str1.1:00000000000004af .LC41
/tmp/cc3I8rcL.s:6862 .rodata.str1.1:00000000000004b1 .LC42
/tmp/cc3I8rcL.s:6868 .rodata.str1.1:00000000000004e9 .LC45
/tmp/cc3I8rcL.s:6866 .rodata.str1.1:00000000000004e7 .LC44
/tmp/cc3I8rcL.s:6864 .rodata.str1.1:00000000000004d2 .LC43
/tmp/cc3I8rcL.s:6870 .rodata.str1.1:0000000000000507 .LC46
/tmp/cc3I8rcL.s:6872 .rodata.str1.1:0000000000000529 .LC47
.ARM.extab.text.run:0000000000000000 $d
.ARM.exidx.text.run:0000000000000000 $d
/tmp/cc3I8rcL.s:6353 .text.start_handler:0000000000000000 $t
.ARM.extab.text.start_handler:0000000000000000 $d
.ARM.exidx.text.start_handler:0000000000000000 $d
/tmp/cc3I8rcL.s:6379 .text.sdcard_main:0000000000000000 $t
/tmp/cc3I8rcL.s:6384 .text.sdcard_main:0000000000000000 sdcard_main
/tmp/cc3I8rcL.s:6447 .text.sdcard_main:0000000000000032 $d
/tmp/cc3I8rcL.s:6467 .text.sdcard_main:0000000000000046 $t
/tmp/cc3I8rcL.s:6745 .text.sdcard_main:00000000000001bc $d
/tmp/cc3I8rcL.s:6874 .rodata.str1.1:0000000000000541 .LC48
/tmp/cc3I8rcL.s:6876 .rodata.str1.1:000000000000054d .LC49
/tmp/cc3I8rcL.s:6878 .rodata.str1.1:0000000000000561 .LC50
/tmp/cc3I8rcL.s:6880 .rodata.str1.1:000000000000057b .LC51
/tmp/cc3I8rcL.s:6882 .rodata.str1.1:0000000000000593 .LC52
/tmp/cc3I8rcL.s:6884 .rodata.str1.1:00000000000005b0 .LC53
/tmp/cc3I8rcL.s:6886 .rodata.str1.1:00000000000005d6 .LC54
/tmp/cc3I8rcL.s:6888 .rodata.str1.1:0000000000000601 .LC55
.ARM.exidx.text.sdcard_main:0000000000000000 $d
/tmp/cc3I8rcL.s:6762 .rodata.kGroups:0000000000000000 $d
/tmp/cc3I8rcL.s:6766 .rodata.kGroups:0000000000000000 kGroups
.debug_frame:0000000000000010 $d
UNDEFINED SYMBOLS
__aeabi_unwind_cpp_pr0
fprintf
_GLOBAL_OFFSET_TABLE_
__sF
__aeabi_unwind_cpp_pr1
strcasecmp
strlen
hashmapHash
memcpy
hashmapRemove
free
writev
__errno
ARM GAS /tmp/cc3I8rcL.s page 197
memset
multiuser_get_app_id
hashmapContainsKey
pthread_mutex_lock
pthread_mutex_unlock
statfs
__stack_chk_fail
__stack_chk_guard
rewinddir
readdir
__memcpy_chk
open
strerror
close
access
opendir
closedir
rmdir
unlink
malloc
__open_2
lstat
truncate
utimensat
strcmp
rename
realloc
calloc
strtoul
__strlen_chk
hashmapGet
multiuser_get_uid
mknod
mkdir
snprintf
read
pread64
pwrite64
fdatasync
fsync
write
umount2
mount
setgroups
setgid
setuid
pthread_mutex_init
strdup
hashmapCreate
getuid
getgid
fs_prepare_dir
umask
fputs
pthread_create
inotify_init
inotify_add_watch
ARM GAS /tmp/cc3I8rcL.s page 198
sleep
hashmapForEach
fopen
sscanf
hashmapPut
strtok
fgets
fclose
exit
getopt
setrlimit
optarg
optind
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment