diff options
Diffstat (limited to 'shell')
-rw-r--r-- | shell/ash.c | 24 |
1 files changed, 12 insertions, 12 deletions
diff --git a/shell/ash.c b/shell/ash.c index 8a8f84a8f..00018387c 100644 --- a/shell/ash.c +++ b/shell/ash.c | |||
@@ -9842,8 +9842,8 @@ static void *funcblock; /* block to allocate function from */ | |||
9842 | static char *funcstring_end; /* end of block to allocate strings from */ | 9842 | static char *funcstring_end; /* end of block to allocate strings from */ |
9843 | #if ENABLE_PLATFORM_MINGW32 | 9843 | #if ENABLE_PLATFORM_MINGW32 |
9844 | static int fs_size; | 9844 | static int fs_size; |
9845 | # if FORKSHELL_DEBUG | ||
9846 | static void *fs_start; | 9845 | static void *fs_start; |
9846 | # if FORKSHELL_DEBUG | ||
9847 | static void *fs_funcstring; | 9847 | static void *fs_funcstring; |
9848 | static const char **annot; | 9848 | static const char **annot; |
9849 | # endif | 9849 | # endif |
@@ -10009,10 +10009,10 @@ static void forkshell_mark_ptr(void *dst, const char *note, int flag) | |||
10009 | static void forkshell_mark_ptr(void *dst, int flag) | 10009 | static void forkshell_mark_ptr(void *dst, int flag) |
10010 | #endif | 10010 | #endif |
10011 | { | 10011 | { |
10012 | /* The relocation map is offset from the start of the forkshell data | 10012 | char *lrelocate = (char *)fs_start + fs_size; |
10013 | * block by 'fs_size' bytes. The flag relating to a particular | 10013 | int index = ((char *)dst - (char *)fs_start)/sizeof(char *); |
10014 | * destination pointer is thus at (dst+fs_size). */ | 10014 | |
10015 | *((char *)dst + fs_size) = flag; | 10015 | lrelocate[index] = flag; |
10016 | 10016 | ||
10017 | #if FORKSHELL_DEBUG | 10017 | #if FORKSHELL_DEBUG |
10018 | if (dst < fs_start || dst >= fs_funcstring) { | 10018 | if (dst < fs_start || dst >= fs_funcstring) { |
@@ -10020,11 +10020,11 @@ static void forkshell_mark_ptr(void *dst, int flag) | |||
10020 | dst, fs_start, fs_funcstring); | 10020 | dst, fs_start, fs_funcstring); |
10021 | } | 10021 | } |
10022 | if (annot) { | 10022 | if (annot) { |
10023 | if (annot[(char *)dst - (char *)fs_start]) { | 10023 | if (annot[index]) { |
10024 | fprintf(stderr, "duplicate annotation: %s %s\n", | 10024 | fprintf(stderr, "duplicate annotation: %s %s\n", |
10025 | annot[(char *)dst - (char *)fs_start], note); | 10025 | annot[index], note); |
10026 | } | 10026 | } |
10027 | annot[(char *)dst - (char *)fs_start] = note; | 10027 | annot[index] = note; |
10028 | } | 10028 | } |
10029 | #endif | 10029 | #endif |
10030 | } | 10030 | } |
@@ -17180,7 +17180,7 @@ forkshell_print(FILE *fp0, struct forkshell *fs, const char **notes) | |||
17180 | count = 0; | 17180 | count = 0; |
17181 | for (i = 0; i < fs->relocatesize; ++i) { | 17181 | for (i = 0; i < fs->relocatesize; ++i) { |
17182 | if (lrelocate[i]) { | 17182 | if (lrelocate[i]) { |
17183 | char **ptr = (char **)((char *)fs + i); | 17183 | char **ptr = (char **)((char *)fs + i * sizeof(char *)); |
17184 | fprintf(fp, "%p %p %s\n", ptr, *ptr, | 17184 | fprintf(fp, "%p %p %s\n", ptr, *ptr, |
17185 | notes && notes[i] ? notes[i] : ""); | 17185 | notes && notes[i] ? notes[i] : ""); |
17186 | ++count; | 17186 | ++count; |
@@ -17225,7 +17225,7 @@ forkshell_prepare(struct forkshell *fs) | |||
17225 | /* calculate size of structure, funcblock and funcstring */ | 17225 | /* calculate size of structure, funcblock and funcstring */ |
17226 | ds = forkshell_size(fs); | 17226 | ds = forkshell_size(fs); |
17227 | size = sizeof(struct forkshell) + ds.funcblocksize + ds.funcstringsize; | 17227 | size = sizeof(struct forkshell) + ds.funcblocksize + ds.funcstringsize; |
17228 | relocatesize = sizeof(struct forkshell) + ds.funcblocksize; | 17228 | relocatesize = (sizeof(struct forkshell) + ds.funcblocksize)/sizeof(char *); |
17229 | 17229 | ||
17230 | /* Allocate shared memory region */ | 17230 | /* Allocate shared memory region */ |
17231 | memset(&sa, 0, sizeof(sa)); | 17231 | memset(&sa, 0, sizeof(sa)); |
@@ -17240,10 +17240,10 @@ forkshell_prepare(struct forkshell *fs) | |||
17240 | if (new == NULL) | 17240 | if (new == NULL) |
17241 | return NULL; | 17241 | return NULL; |
17242 | fs_size = size; | 17242 | fs_size = size; |
17243 | fs_start = new; | ||
17243 | funcblock = (char *)(new + 1); | 17244 | funcblock = (char *)(new + 1); |
17244 | funcstring_end = (char *)new + size; | 17245 | funcstring_end = (char *)new + size; |
17245 | #if FORKSHELL_DEBUG | 17246 | #if FORKSHELL_DEBUG |
17246 | fs_start = new; | ||
17247 | fs_funcstring = (char *)new + sizeof(struct forkshell) + ds.funcblocksize; | 17247 | fs_funcstring = (char *)new + sizeof(struct forkshell) + ds.funcblocksize; |
17248 | relocate = (char *)new + size; | 17248 | relocate = (char *)new + size; |
17249 | annot = (const char **)xzalloc(sizeof(char *)*relocatesize); | 17249 | annot = (const char **)xzalloc(sizeof(char *)*relocatesize); |
@@ -17317,7 +17317,7 @@ forkshell_init(const char *idstr) | |||
17317 | lrelocate = (char *)fs + fs->size; | 17317 | lrelocate = (char *)fs + fs->size; |
17318 | for (i = 0; i < fs->relocatesize; i++) { | 17318 | for (i = 0; i < fs->relocatesize; i++) { |
17319 | if (lrelocate[i]) { | 17319 | if (lrelocate[i]) { |
17320 | ptr = (char **)((char *)fs + i); | 17320 | ptr = (char **)((char *)fs + i * sizeof(char *)); |
17321 | if (*ptr) | 17321 | if (*ptr) |
17322 | *ptr = (char *)fs + (*ptr - fs->old_base); | 17322 | *ptr = (char *)fs + (*ptr - fs->old_base); |
17323 | } | 17323 | } |