linuxppc-dev.lists.ozlabs.org archive mirror
 help / color / mirror / Atom feed
* 405 -- a little console help, part 2
@ 2001-11-08 13:36 Mark Pilon
  2001-11-08 15:46 ` Mark Hatle
  2001-11-08 17:37 ` Scott Anderson
  0 siblings, 2 replies; 7+ messages in thread
From: Mark Pilon @ 2001-11-08 13:36 UTC (permalink / raw)
  To: linuxppc-embedded


I've got a little more info -- /bin/sash doesn't produce any
output and just sits there, echoing charachters typed.  I'll try poking
around w/ gdb/abatron but am not sure how to find the exec'd shell.

if I spawn ash w/ init=/bin/ash:
...
Looking up port of RPC 100003/2 on 192.168.200.4
Looking up port of RPC 100005/1 on 192.168.200.4
VFS: Mounted root (nfs filesystem).
Freeing unused kernel memory: 56k init
executing init = /bin/ash
sh: can't access tty; job control turned off
#

--  but at least I get a prompt and it seems to work.

I'm not sure what the message "can't access tty; job control turned off"
means -- I'll have to get the source for ash and debug it.

I would have thought that spawning init=/bin/sash would have been the
easiest.

the target filesystem is pieces of mvista's hhl2.0 target
for ppc405.

Since I'm nfs mounting it, I'm going to just mount the whole
thing and see if what I need turns up;  it'd be nice to know
for those wanting to run a more spare system.

Mark
--
Mark Pilon

Minolta-QMS
P.O. Box 37
Fallon, MT.  59326-0037

1-406-853-0433

** Sent via the linuxppc-embedded mail list. See http://lists.linuxppc.org/

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: 405 -- a little console help, part 2
  2001-11-08 13:36 405 -- a little console help, part 2 Mark Pilon
@ 2001-11-08 15:46 ` Mark Hatle
  2001-11-09  0:44   ` David Gibson
  2001-11-08 17:37 ` Scott Anderson
  1 sibling, 1 reply; 7+ messages in thread
From: Mark Hatle @ 2001-11-08 15:46 UTC (permalink / raw)
  To: Mark Pilon; +Cc: linuxppc-embedded


Mark Pilon wrote:
>
> I've got a little more info -- /bin/sash doesn't produce any
> output and just sits there, echoing charachters typed.  I'll try poking
> around w/ gdb/abatron but am not sure how to find the exec'd shell.
>
> if I spawn ash w/ init=/bin/ash:
> ...
> --  but at least I get a prompt and it seems to work.

That is very odd, I don't know why ash would work and sash does not.
Very strange indeed.

> I'm not sure what the message "can't access tty; job control turned off"
> means -- I'll have to get the source for ash and debug it.

This sounds like you do not have proper /dev/* populated..  i.e.
/dev/console, /dev/tty, /dev/pts, etc.  For initial system bringup you
can ignore that warning.  (However, keep in mind that ctrl-C, ctrl-Z,
etc job control will not work..)  This might also partially be a symptom
of ash starting as process 1, process 1 contains special rules in the
kernel as it is the init process.

--Mark

** Sent via the linuxppc-embedded mail list. See http://lists.linuxppc.org/

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: 405 -- a little console help, part 2
  2001-11-08 13:36 405 -- a little console help, part 2 Mark Pilon
  2001-11-08 15:46 ` Mark Hatle
@ 2001-11-08 17:37 ` Scott Anderson
  1 sibling, 0 replies; 7+ messages in thread
From: Scott Anderson @ 2001-11-08 17:37 UTC (permalink / raw)
  To: Mark Pilon; +Cc: linuxppc-embedded

[-- Attachment #1: .gdbinit --]
[-- Type: application/octet-stream, Size: 5010 bytes --]

set output-radix 16

define task_struct_header
  printf "Address      pid ST device comm\n"
end

define task_struct_show
  printf "0x%08X %5d %2d ", $arg0, $arg0->pid, $arg0->state
  if ($arg0->tty)
    printf "0x%04X ", $arg0->tty->device
  else
    printf "       "
  end
  printf "%s\n", $arg0->comm
end

define ps
  task_struct_header
  task_struct_show current
  set $t=current->next_task
  while current!=$t
    task_struct_show $t
    set $t=$t->next_task
  end
end
document ps
Print points of interest for all tasks starting at current
end

define task
  task_struct_header
  set $t=(struct task_struct *)$arg0
  task_struct_show $t
end
document task
Print points of interest for the given task_struct
end

define maps
  set $t=(struct task_struct *)$arg0
  if ($t->mm)
    set $m=$t->mm->mmap
    while ($m != 0)
      printf "0x%08X 0x%08X ", $m->vm_start, $m->vm_end
      printf "%c", ($m->vm_flags & 0x01) ? 'r' : '-'
      printf "%c", ($m->vm_flags & 0x02) ? 'w' : '-'
      printf "%c", ($m->vm_flags & 0x04) ? 'x' : '-'
      printf "%c", ($m->vm_flags & 0x80) ? 's' : 'p'
      if ($m->vm_file && $m->vm_file->f_dentry)
        printf " %s", $m->vm_file->f_dentry->d_name.name
      end
      printf "\n"
      set $m=$m->vm_next
    end
  else
    printf "No mm for task\n"
  end
end
document maps
Print the address map for a given task_struct (ala /proc/<pid>/maps)
end

define pgdir
  printf "Virtual    Physical   Flags\n"
  set $t=(struct task_struct *)$arg0
  if ($t->thread)
    set $i=0
    set $pgdir=(unsigned long **)$t->thread.pgdir
    while ($i < 1024)
      if (*$pgdir)
        set $j=0
        set $pte=(unsigned long *)*$pgdir
        while ($j < 1024)
# To see all non-zero entries
#          if (*$pte)
# To see _PAGE_PRESENT entries on PPC 4xx
          if (*$pte & 0x20)
# To see _PAGE_PRESENT entries on PPC non-4xx
#          if (*$pte & 0x1)
            printf "0x%08X 0x%08X 0x%03X\n", ($i<<22)|($j<<12), *$pte&~0xFFF, *$pte&0xFFF
          end
          set $j=$j+1
          set $pte=$pte+1
        end
      end
      set $i=$i+1
      set $pgdir=$pgdir+1
    end
  end
end
document pgdir
Print the virtual to physical mappings for a given task_struct's memory
end

define phys
  set $t=(struct task_struct *)$arg0
  set $virt=(unsigned long)$arg1
  set $pgdir=(unsigned long **)$t->thread.pgdir + ($virt>>22)
  if (*$pgdir != 0)
    set $pte=(unsigned long *)*$pgdir + (($virt>>12)&0x3FF)
    if (*$pte != 0)
      printf "0x%08X 0x%03X\n", (*$pte&(~0xFFF))|($virt&0xFFF), *$pte&0xFFF
    else
      printf "No pte for given address\n"
    end
  else
    printf "No pgdir for given address\n"
  end
end
document phys
Print the physical address and PTE flags for a given task/address
end

define nip
  set $t=(struct task_struct *)$arg0
  printf "NIP=0x%08X\n", $t->thread.regs.nip
  if ($t->mm)
    set $m=$t->mm->mmap
    while ($m != 0)
      if ($m->vm_start < $t->thread.regs.nip && $t->thread.regs.nip < $m->vm_end)
        printf "section: 0x%08X 0x%08X ", $m->vm_start, $m->vm_end
        printf "%c", ($m->vm_flags & 0x01) ? 'r' : '-'
        printf "%c", ($m->vm_flags & 0x02) ? 'w' : '-'
        printf "%c", ($m->vm_flags & 0x04) ? 'x' : '-'
        printf "%c", ($m->vm_flags & 0x80) ? 's' : 'p'
        if ($m->vm_file && $m->vm_file->f_dentry)
          printf " %s", $m->vm_file->f_dentry->d_name.name
        end
	printf "\noffset=0x%08X\n", $t->thread.regs.nip - $m->vm_start
        set $m=0
      else
        set $m=$m->vm_next
      end
    end
  else
    printf "No mm for task\n"
  end
end
document nip
Print the next instruction pointer and offset within a
memory mapping for a given task_struct
end

define sp
  set $t=(struct task_struct *)$arg0
  printf "SP(R1)=0x%08X\n", $t->thread.regs.gpr[1]
  if ($t->mm)
    set $m=$t->mm->mmap
    while ($m != 0)
      if ($m->vm_start < $t->thread.regs.gpr[1] && $t->thread.regs.gpr[1] < $m->vm_end)
        printf "section: 0x%08X 0x%08X ", $m->vm_start, $m->vm_end
        printf "%c", ($m->vm_flags & 0x01) ? 'r' : '-'
        printf "%c", ($m->vm_flags & 0x02) ? 'w' : '-'
        printf "%c", ($m->vm_flags & 0x04) ? 'x' : '-'
        printf "%c", ($m->vm_flags & 0x80) ? 's' : 'p'
        if ($m->vm_file && $m->vm_file->f_dentry)
          printf " %s", $m->vm_file->f_dentry->d_name.name
        end
	printf "\noffset=0x%08X\n", $t->thread.regs.gpr[1] - $m->vm_start
        set $m=0
      else
        set $m=$m->vm_next
      end
    end
  else
    printf "No mm for task\n"
  end
end
document sp
Print the stack pointer and offset within a memory mapping
for a given task_struct
end

define kbt
  set $t=(struct task_struct *)$arg0
  set $last_ksp=$t
  set $ksp=$t->thread.ksp
  while ($ksp > $last_ksp && $ksp < $t+8192)
    printf "0x%08X: ", $ksp
    if (*($ksp+4) > 0xC0000000)
      x/1i *($ksp+4)
#      list **($ksp+4)
    else
      printf "0x%08X\n", *($ksp+4)
    end
    set $ksp=*$ksp
  end
end
document kbt
Print the backtrace of a given task_struct's kernel stack
end

[-- Attachment #2: Type: text/plain, Size: 471 bytes --]


On Thursday, November 8, 2001, at 05:36  AM, Mark Pilon wrote:
 >  I'll try poking
 > around w/ gdb/abatron but am not sure how to find the exec'd shell.

I hacked up some user defined functions in gdb to let me do ps
and some other things that I found useful for kernel debugging.
I've attached my .gdbinit so you can see what I did.  Warning:
there are some processor specific bits in some of the functions,
but the ps function "should just work".

   Scott Anderson


^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: 405 -- a little console help, part 2
  2001-11-08 15:46 ` Mark Hatle
@ 2001-11-09  0:44   ` David Gibson
  2001-11-09 13:40     ` Mark Pilon
  0 siblings, 1 reply; 7+ messages in thread
From: David Gibson @ 2001-11-09  0:44 UTC (permalink / raw)
  To: linuxppc-embedded


On Thu, Nov 08, 2001 at 09:46:27AM -0600, Mark Hatle wrote:
>
> Mark Pilon wrote:
> >
> > I've got a little more info -- /bin/sash doesn't produce any
> > output and just sits there, echoing charachters typed.  I'll try poking
> > around w/ gdb/abatron but am not sure how to find the exec'd shell.
> >
> > if I spawn ash w/ init=/bin/ash:
> > ...
>
> That is very odd, I don't know why ash would work and sash does not.
> Very strange indeed.

Ah, I think I know why this might be - are you using the 2_4_devel
tree?

All static executables segfaulted before reaching main until very
recently: the 4xx's MMU makes it possible to actually enforce the
execute permission bit on pages.  Since most processors don't allow
this, however, there are heaps of bugs in userland (binutils etc.)
where pages aren't marked executable that need to be.  In this case
there was instruction just before the got that wasn't marked
executable.

For now, at least, I've disabled enforcement of the page execute
permissions, because there's just too much stuff that breaks with it
on.

--
David Gibson			| For every complex problem there is a
david@gibson.dropbear.id.au	| solution which is simple, neat and
				| wrong.  -- H.L. Mencken
http://www.ozlabs.org/people/dgibson


** Sent via the linuxppc-embedded mail list. See http://lists.linuxppc.org/

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: 405 -- a little console help, part 2
  2001-11-09  0:44   ` David Gibson
@ 2001-11-09 13:40     ` Mark Pilon
  2001-11-09 13:53       ` David Gibson
  0 siblings, 1 reply; 7+ messages in thread
From: Mark Pilon @ 2001-11-09 13:40 UTC (permalink / raw)
  To: David Gibson; +Cc: linuxppc-embedded


David Gibson wrote:
>
> Ah, I think I know why this might be - are you using the 2_4_devel
> tree?
>
> All static executables segfaulted before reaching main until very
> recently: the 4xx's MMU makes it possible to actually enforce the
> execute permission bit on pages.  Since most processors don't allow
> this, however, there are heaps of bugs in userland (binutils etc.)
> where pages aren't marked executable that need to be.  In this case
> there was instruction just before the got that wasn't marked
> executable.
>
> For now, at least, I've disabled enforcement of the page execute
> permissions, because there's just too much stuff that breaks with it
> on.

What's the fix for this?  It sounds like I want to un-do that change
enforcing page execute permissions -- David, could you give me
a spot to look and a suggested patch?  anyone?

thanks,

Mark
--
Mark Pilon

Minolta-QMS
P.O. Box 37
Fallon, MT.  59326-0037

1-406-853-0433

** Sent via the linuxppc-embedded mail list. See http://lists.linuxppc.org/

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: 405 -- a little console help, part 2
  2001-11-09 13:40     ` Mark Pilon
@ 2001-11-09 13:53       ` David Gibson
  2001-11-11 13:28         ` Jure Menart
  0 siblings, 1 reply; 7+ messages in thread
From: David Gibson @ 2001-11-09 13:53 UTC (permalink / raw)
  To: linuxppc-embedded


On Fri, Nov 09, 2001 at 06:40:25AM -0700, Mark Pilon wrote:
> David Gibson wrote:
> >
> > Ah, I think I know why this might be - are you using the 2_4_devel
> > tree?
> >
> > All static executables segfaulted before reaching main until very
> > recently: the 4xx's MMU makes it possible to actually enforce the
> > execute permission bit on pages.  Since most processors don't allow
> > this, however, there are heaps of bugs in userland (binutils etc.)
> > where pages aren't marked executable that need to be.  In this case
> > there was instruction just before the got that wasn't marked
> > executable.
> >
> > For now, at least, I've disabled enforcement of the page execute
> > permissions, because there's just too much stuff that breaks with it
> > on.
>
> What's the fix for this?  It sounds like I want to un-do that change
> enforcing page execute permissions -- David, could you give me
> a spot to look and a suggested patch?  anyone?

I've checked the fix into the latest linuxppc_2_4_devel.  Failing
that, look in do_page_fault() in arch/ppc/mm/fault.c, look for a test
against vma->flags & VM_EXEC, and remove it.

--
David Gibson			| For every complex problem there is a
david@gibson.dropbear.id.au	| solution which is simple, neat and
				| wrong.  -- H.L. Mencken
http://www.ozlabs.org/people/dgibson


** Sent via the linuxppc-embedded mail list. See http://lists.linuxppc.org/

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: 405 -- a little console help, part 2
  2001-11-09 13:53       ` David Gibson
@ 2001-11-11 13:28         ` Jure Menart
  0 siblings, 0 replies; 7+ messages in thread
From: Jure Menart @ 2001-11-11 13:28 UTC (permalink / raw)
  To: linuxppc-embedded


Hi,
On Sat, Nov 10, 2001 at 12:53:49AM +1100, David Gibson wrote:
> I've checked the fix into the latest linuxppc_2_4_devel.  Failing
> that, look in do_page_fault() in arch/ppc/mm/fault.c, look for a test
> against vma->flags & VM_EXEC, and remove it.
>
I've got similiar problem, just that Seg faults form Dynamically linked
programs is just a beginning...
When I boot from ramdisk all programs work fine... aka mount, ls, bash...
but when I try to boot from disk (root=/dev/hda2 for example) my init prints
'Bug in dynamic linker: dynamic-link.h in line 62' (it might be slightly
changed because I wrote it from head, but error describes same informations).
So I checked in glibcs what this error is and I found out that assertion was
caused because of 'bad dynamic tag'.
If I mount disk from ramdisk and try to execute programs the same happens...
if they are dynamically compiled the same bug ('bad dynamic tag') happens.
I use linuxppc_2_4_devel kernel from mvista, daytagged from last wednesday
(7.11.2001), glibcs from HardHat linux (precompiled for IBM 405 gp).

Has anyone same problems? Could it be another bug in standard libarires?
Anywhere else in cross-compiler enviroment... binutils maybe?

Regards, Jure

** Sent via the linuxppc-embedded mail list. See http://lists.linuxppc.org/

^ permalink raw reply	[flat|nested] 7+ messages in thread

end of thread, other threads:[~2001-11-11 13:28 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2001-11-08 13:36 405 -- a little console help, part 2 Mark Pilon
2001-11-08 15:46 ` Mark Hatle
2001-11-09  0:44   ` David Gibson
2001-11-09 13:40     ` Mark Pilon
2001-11-09 13:53       ` David Gibson
2001-11-11 13:28         ` Jure Menart
2001-11-08 17:37 ` Scott Anderson

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).