This is an automated email from the git hooks/post-receive script. sthibault pushed a commit to branch master in repository hurd.
commit 776f16d737e3c1e7f1567d43d28171630e59f3a0 Author: Samuel Thibault <[email protected]> Date: Fri Aug 26 01:04:13 2016 +0000 New upstream snapshot --- exec/exec.c | 57 +++++++++++++++++++++++++++++++------------ mach-defpager/default_pager.c | 33 +++++++++++++------------ term/munge.c | 7 ------ term/term.h | 1 - term/users.c | 3 --- utils/rpctrace.c | 3 ++- 6 files changed, 61 insertions(+), 43 deletions(-) diff --git a/exec/exec.c b/exec/exec.c index 3b63b7f..ea352fa 100644 --- a/exec/exec.c +++ b/exec/exec.c @@ -47,11 +47,12 @@ pthread_rwlock_t std_lock = PTHREAD_RWLOCK_INITIALIZER; #include <hurd/sigpreempt.h> -/* Load or allocate a section. */ -static void +/* Load or allocate a section. + Returns the address of the end of the section. */ +static vm_address_t load_section (void *section, struct execdata *u) { - vm_address_t addr = 0; + vm_address_t addr = 0, end = 0; vm_offset_t filepos = 0; vm_size_t filesz = 0, memsz = 0; vm_prot_t vm_prot; @@ -60,7 +61,7 @@ load_section (void *section, struct execdata *u) const ElfW(Phdr) *const ph = section; if (u->error) - return; + return 0; vm_prot = VM_PROT_READ | VM_PROT_WRITE | VM_PROT_EXECUTE; @@ -97,9 +98,11 @@ load_section (void *section, struct execdata *u) if (anywhere && addr < vm_page_size) addr = vm_page_size; + end = addr + memsz; + if (memsz == 0) /* This section is empty; ignore it. */ - return; + return 0; if (filesz != 0) { @@ -173,7 +176,7 @@ load_section (void *section, struct execdata *u) write_to_task (mapstart, size, vm_prot, (vm_address_t) buf); } if (u->error) - return; + return 0; if (anywhere) { @@ -230,7 +233,7 @@ load_section (void *section, struct execdata *u) { maplose: vm_deallocate (u->task, mapstart, filesz); - return; + return 0; } } @@ -294,7 +297,7 @@ load_section (void *section, struct execdata *u) mask, anywhere, MACH_PORT_NULL, 0, 1, vm_prot, VM_PROT_ALL, VM_INHERIT_COPY); if (u->error) - return; + return 0; } if (anywhere) @@ -319,7 +322,7 @@ load_section (void *section, struct execdata *u) if (u->error) { vm_deallocate (u->task, mapstart, memsz); - return; + return 0; } u->error = hurd_safe_memset ( (void *) (ourpage + (addr - overlap_page)), @@ -335,6 +338,7 @@ load_section (void *section, struct execdata *u) munmap ((caddr_t) ourpage, size); } } + return end; } /* XXX all accesses of the mapped data need to use fault handling @@ -717,18 +721,37 @@ set_name (task_t task, const char *exec_name, pid_t pid) free (name); } -/* Load the file. */ -static void -load (task_t usertask, struct execdata *e) +/* Load the file. Returns the address of the end of the load. */ +static vm_offset_t +load (task_t usertask, struct execdata *e, vm_offset_t anywhere_start) { + int anywhere = e->info.elf.anywhere; + vm_offset_t end; e->task = usertask; if (! e->error) { ElfW(Word) i; + + if (anywhere && anywhere_start) + { + /* Make sure this anywhere-load will go at the end of the previous + anywhere-load. */ + /* TODO: Rather compute how much contiguous room is needed, allocate + the area from the kernel, and then map memory sections. */ + /* TODO: Possibly implement Adresse Space Layout Randomization. */ + e->info.elf.loadbase = anywhere_start; + e->info.elf.anywhere = 0; + } + for (i = 0; i < e->info.elf.phnum; ++i) if (e->info.elf.phdr[i].p_type == PT_LOAD) - load_section (&e->info.elf.phdr[i], e); + { + end = load_section (&e->info.elf.phdr[i], e); + if (anywhere && end > anywhere_start) + /* This section pushes the next anywhere-load further */ + anywhere_start = end; + } /* The entry point address is relative to wherever we loaded the program text. */ @@ -737,6 +760,9 @@ load (task_t usertask, struct execdata *e) /* Release the conch for the file. */ finish_mapping (e); + + /* Return potentially-new start for anywhere-loads. */ + return round_page (anywhere_start); } @@ -783,6 +809,7 @@ do_exec (file_t file, mach_msg_type_number_t i; int intarray_dealloc = 0; /* Dealloc INTARRAY before returning? */ int oldtask_trashed = 0; /* Have we trashed the old task? */ + vm_address_t anywhere_start = 0; /* Prime E for executing FILE and check its validity. This must be an inline function because it stores pointers into alloca'd storage in E @@ -1156,7 +1183,7 @@ do_exec (file_t file, if (interp.file != MACH_PORT_NULL) { /* Load the interpreter file. */ - load (newtask, &interp); + anywhere_start = load (newtask, &interp, anywhere_start); if (interp.error) { e.error = interp.error; @@ -1167,7 +1194,7 @@ do_exec (file_t file, /* Load the file into the task. */ - load (newtask, &e); + anywhere_start = load (newtask, &e, anywhere_start); if (e.error) goto out; diff --git a/mach-defpager/default_pager.c b/mach-defpager/default_pager.c index 4293e2a..d7bc75b 100644 --- a/mach-defpager/default_pager.c +++ b/mach-defpager/default_pager.c @@ -581,7 +581,7 @@ pager_dealloc_page(pindex, page, lock_it) /* be paranoid */ if (no_partition(pindex)) panic("%sdealloc_page",my_name); -ddprintf ("pager_dealloc_page(%d,%x,%d)\n",pindex,page,lock_it); +ddprintf ("pager_dealloc_page(%d,%lx,%d)\n",pindex,page,lock_it); part = partition_of(pindex); if (page >= part->total_size) @@ -1092,7 +1092,7 @@ pager_read_offset(pager, offset) #endif if (f_page >= pager->size) { - ddprintf ("%spager_read_offset pager %x: bad page %d >= size %d", + ddprintf ("%spager_read_offset pager %p: bad page %ld >= size %d", my_name, pager, f_page, pager->size); pthread_mutex_unlock(&pager->lock); return (union dp_map) (union dp_map *) NO_BLOCK; @@ -1360,7 +1360,7 @@ pager_write_offset(pager, offset) } while (f_page >= pager->size) { - ddprintf ("pager_write_offset: extending: %x %x\n", f_page, pager->size); + ddprintf ("pager_write_offset: extending: %lx %x\n", f_page, pager->size); /* * Paging object must be extended. @@ -1380,7 +1380,7 @@ pager_write_offset(pager, offset) #if DEBUG_READER_CONFLICTS pager->readers++; #endif - ddprintf ("pager_write_offset: done extending: %x %x\n", f_page, pager->size); + ddprintf ("pager_write_offset: done extending: %lx %x\n", f_page, pager->size); } if (INDIRECT_PAGEMAP(pager->size)) { @@ -1429,7 +1429,7 @@ pager_write_offset(pager, offset) } block = mapptr[f_page]; - ddprintf ("pager_write_offset: block starts as %x[%x] %x\n", mapptr, f_page, block); + ddprintf ("pager_write_offset: block starts as %p[%lx] %p\n", mapptr, f_page, block.indirect); if (no_block(block)) { vm_offset_t off; @@ -1656,7 +1656,7 @@ default_read(ds, addr, size, offset, out_addr, deallocate, external) * Read it, trying for the entire page. */ offset = ptoa(block.block.p_offset); -ddprintf ("default_read(%x,%x,%x,%d)\n",addr,size,offset,block.block.p_index); +ddprintf ("default_read(%lx,%x,%lx,%d)\n",addr,size,offset,block.block.p_index); part = partition_of(block.block.p_index); first_time = TRUE; *out_addr = addr; @@ -1723,7 +1723,7 @@ default_write(ds, addr, size, offset) vm_size_t wsize; int rc; - ddprintf ("default_write: pager offset %x\n", offset); + ddprintf ("default_write: pager offset %lx\n", offset); /* * Find block in paging partition @@ -1744,7 +1744,7 @@ default_write(ds, addr, size, offset) } #endif /* CHECKSUM */ offset = ptoa(block.block.p_offset); -ddprintf ("default_write(%x,%x,%x,%d)\n",addr,size,offset,block.block.p_index); +ddprintf ("default_write(%lx,%x,%lx,%d)\n",addr,size,offset,block.block.p_index); part = partition_of(block.block.p_index); /* @@ -1760,7 +1760,7 @@ ddprintf ("default_write(%x,%x,%x,%d)\n",addr,size,offset,block.block.p_index); &wsize); if (rc != 0) { dprintf("*** PAGER ERROR: default_write: "); - dprintf("ds=0x%x addr=0x%x size=0x%x offset=0x%x resid=0x%x\n", + dprintf("ds=0x%p addr=0x%lx size=0x%x offset=0x%lx resid=0x%x\n", ds, addr, size, offset, wsize); return (PAGER_ERROR); } @@ -1865,7 +1865,7 @@ destroy_paging_partition(name, pp_private) */ all_over_again: #if debug -dprintf("Partition x%x (id x%x) for %s, all_ok %d\n", part, id, name, all_ok); +dprintf("Partition x%p (id x%x) for %s, all_ok %d\n", part, id, name, all_ok); #endif all_ok = TRUE; pthread_mutex_lock(&part->p_lock); @@ -1920,6 +1920,7 @@ dprintf("Partition x%x (id x%x) for %s, all_ok %d\n", part, id, name, all_ok); * Put partition back in. */ part->going_away = FALSE; + pthread_mutex_unlock(&part->p_lock); return KERN_FAILURE; } @@ -2343,7 +2344,7 @@ seqnos_memory_object_terminate(ds, seqno, pager_request, pager_name) if (ds == DEFAULT_PAGER_NULL) panic(here, my_name); ddprintf ("seqnos_memory_object_terminate <%p>: pager_port_lock: <%p>[s:%d,r:%d,w:%d,l:%d], %d\n", - &ds, ds, ds->seqno, ds->readers, ds->writers, ds->lock.held, seqno); + &ds, ds, ds->seqno, ds->readers, ds->writers, ds->lock.__held, seqno); pager_port_lock(ds, seqno); /* @@ -2374,7 +2375,7 @@ ddprintf ("seqnos_memory_object_terminate <%p>: pager_port_lock: <%p>[s:%d,r:%d, ds->pager_name = MACH_PORT_NULL; ds->name_refs = 0; ddprintf ("seqnos_memory_object_terminate <%p>: pager_port_unlock: <%p>[s:%d,r:%d,w:%d,l:%d]\n", - &ds, ds, ds->seqno, ds->readers, ds->writers, ds->lock.held); + &ds, ds, ds->seqno, ds->readers, ds->writers, ds->lock.__held); pager_port_unlock(ds); /* @@ -2486,7 +2487,7 @@ seqnos_memory_object_data_request(ds, seqno, reply_to, offset, if (ds == DEFAULT_PAGER_NULL) panic(here,my_name); ddprintf ("seqnos_memory_object_data_request <%p>: pager_port_lock: <%p>[s:%d,r:%d,w:%d,l:%d], %d\n", - &ds, ds, ds->seqno, ds->readers, ds->writers, ds->lock.held, seqno); + &ds, ds, ds->seqno, ds->readers, ds->writers, ds->lock.__held, seqno); pager_port_lock(ds, seqno); pager_port_check_request(ds, reply_to); pager_port_wait_for_writers(ds); @@ -2498,7 +2499,7 @@ ddprintf ("seqnos_memory_object_data_request <%p>: pager_port_lock: <%p>[s:%d,r: errors = ds->errors; ddprintf ("seqnos_memory_object_data_request <%p>: pager_port_unlock: <%p>[s:%d,r:%d,w:%d,l:%d]\n", - &ds, ds, ds->seqno, ds->readers, ds->writers, ds->lock.held); + &ds, ds, ds->seqno, ds->readers, ds->writers, ds->lock.__held); pager_port_unlock(ds); if (errors) { @@ -2588,12 +2589,12 @@ seqnos_memory_object_data_initialize(ds, seqno, pager_request, if (ds == DEFAULT_PAGER_NULL) panic(here,my_name); ddprintf ("seqnos_memory_object_data_initialize <%p>: pager_port_lock: <%p>[s:%d,r:%d,w:%d,l:%d], %d\n", - &ds, ds, ds->seqno, ds->readers, ds->writers, ds->lock.held, seqno); + &ds, ds, ds->seqno, ds->readers, ds->writers, ds->lock.__held, seqno); pager_port_lock(ds, seqno); pager_port_check_request(ds, pager_request); pager_port_start_write(ds); ddprintf ("seqnos_memory_object_data_initialize <%p>: pager_port_unlock: <%p>[s:%d,r:%d,w:%d,l:%d]\n", - &ds, ds, ds->seqno, ds->readers, ds->writers, ds->lock.held); + &ds, ds, ds->seqno, ds->readers, ds->writers, ds->lock.__held); pager_port_unlock(ds); for (amount_sent = 0; diff --git a/term/munge.c b/term/munge.c index 7e08e2d..96b0df3 100644 --- a/term/munge.c +++ b/term/munge.c @@ -87,11 +87,6 @@ output_character (int c) } else if ((oflag & ONOEOT) && c == CHAR_EOT) ; - else if ((oflag & OTILDE) && c == '~') - { - poutput ('\\'); - poutput ('`'); - } else if ((oflag & OLCASE) && isalpha (c)) { if (isupper (c)) @@ -125,8 +120,6 @@ output_width (int c, int loc) if (oflag & OPOST) { - if ((oflag & OTILDE) && c == '~') - return 2; if ((oflag & OLCASE) && isalpha (c) && isupper (c)) return 2; } diff --git a/term/term.h b/term/term.h index 3067425..0a42869 100644 --- a/term/term.h +++ b/term/term.h @@ -65,7 +65,6 @@ #else #define OLCASE (1 << 9) #endif -#define OTILDE (1 << 10) /* used in mdmctl device call */ #define MDMCTL_BIS 0 diff --git a/term/users.c b/term/users.c index 8151dc7..193b358 100644 --- a/term/users.c +++ b/term/users.c @@ -183,9 +183,6 @@ open_hook (struct trivfs_control *cntl, open_count++; /* XXX debugging */ - /* XXX debugging */ - assert (! (termstate.c_oflag & OTILDE)); - /* Assert DTR if necessary. */ if (termflags & NO_CARRIER) { diff --git a/utils/rpctrace.c b/utils/rpctrace.c index 276377c..25d9bc6 100644 --- a/utils/rpctrace.c +++ b/utils/rpctrace.c @@ -1524,7 +1524,8 @@ print_data (mach_msg_type_name_t type, the first character that has not yet been printed. */ const char *p, *q; p = q = (const char *) data; - while (q && *q && q - (const char *) data < (int) (nelt * eltsize)) + while (q && q - (const char *) data < (int) (nelt * eltsize) + && (*q || type == MACH_MSG_TYPE_CHAR)) { if (isgraph (*q) || *q == ' ') { -- Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-hurd/hurd.git
