Suraj  Kumar commented: 
https://gitlab.rtems.org/groups/rtems/-/epics/1#note_108823


I am posting all my updates so far as comments here as per gedare's suggestion

Week 1: 

```
Planned:
[+] Set up blog website for writing weekly blogs for GSoC
[+] Learn about basic kernel structures (mainly semaphores & task control 
blocks)
[+] Set up a debugging environment for testing out C++ applications via GDB 
[+] Go through my host GDB installation vs RTEMS' GDB installation to identify 
differences, then look at existing pretty printing scripts (including the ones 
Chris had linked for me when I was writing my proposal)

Done: 
[+] Set up blog successfully ✅
[+] Learned about semaphores, I'm reading from a book so I also ended up 
delving deeper into other OS related things apart from just structures, to get 
a better general idea overall 
[+] Set up a debugging environment, and tested GDB on various C++ programs 
implementing different STL objects, across different BSPs on various 
architectures (namely arm/xilinx_zynq_a9_qemu, x86_64/amd64, sparc/leon3) ✅
[+] Went through the basic files present in both, kind of got lost in trying to 
understand the context of various files in there - spent some time on that. 
Also looked at existing pretty printing implementations and tried to get a 
side-by-side view on C++ STL objects that I write vs the implementation and how 
they're handled by the pretty-printer. 


Blockers: 
[-] Not too many, except I was travelling from home to college midway so lost 
about 1.5 days on that 
```

Week 2:

```
Planned: 
- Design initialisation hook to run GDB commands for specific installation 
prefixes on GDB, which run every time GDB is loaded
- Continue learning about Task Control Blocks

Done: 
- Have good progress on various ways in which I can design the initialisation 
hook (narrowed it down to 3 methods - 2 sub-par and 1 ideal) [`~/.gdbinit`, `-x 
init.gdb`, `auto-load` directory]
- Learned more about Task Control Blocks and Process Environment Blocks and how 
PEB's work (sources: https://pages.cs.wisc.edu/~remzi/OSTEP/, 
https://ia801902.us.archive.org/28/items/operating-system-concepts-10th/operating-system-concepts-10th.pdf)

Blockers: 
- Got sick, so couldn't work for about a day and a half in between

Planned for next week: 
- Finish designing the initialisation hook on GDB
- Look into setting up a kernel debugging environment on RTEMS
```

Week 3: 

```
Planned: 
- Get auto-loading + pretty-printing to work 
- Look into setting up kernel debugging environment (i sort of pushed this back 
a bit to focus more on the init-hook, will work on it in the upcoming weeks)

Done:
- Finalised on .debug_gdb_scripts approach to adding initialisation hook, and 
got auto-loading + pretty-printing to work perfectly, working on different 
approaches to handle exception it causes (should be easy)
- Looking into adding config flag when building GDB from source to add 
system-wide gdbinit directory 
- Modifying linkercmd script to add custom section to script without "section 
outside of ELF segment warning"

Blockers:
- 

Planned for the coming week:
- Modify linkercmd script to add section to ELF when building app for one BSP, 
then implement the same to every BSP
- Figure out way to keep track of path to said initialisation script 
- (possibly) explore option of modifying config options when building GDB to 
test "{prefix}/usr/share/gdb/system-gdbinit" as the system-wide init directory 
```

Week 4: 

```
Planned: 
- Modify linkercmd script to add section to ELF when building app for one BSP, 
then implement the same to every BSP
- Figure out way to keep track of path to said initialisation script 
- Explore option of modifying config options when building GDB to test 
"{prefix}/usr/share/gdb/system-gdbinit" as the system-wide init directory
- Get at least auto-loading to work along with linker modifications


Done: 
- Successfully did linkercmd.base modifications and got pretty-printing to 
work, although, hit roadblock when finding ways to keep track of path to 
pretty-printing script
- Got config option modification to work, but ruled it out for non-optimal 
design 
- Went back and forth with GDB devs regarding possible solutions for issue, 
then discovered that there is no solid one at the moment 
- Discovered new way of loading script (embedding script text inside section). 
Tested it, and it works well without any need of maintaining paths. Currently 
working with mentors to try and finalise on one approach 

Blockers: 
- Very little/no documentation for the problem i am trying to fix, so finding 
ways that work + will be sustainable on RTEMS is quite challenging

Planned for next week:
- Work with mentors & hopefully finalise on approach. Currently i'm not too 
sure what I can plan ahead to make my work optimal 
```

Week 5: 

```
Planned: 
[Was a bit shaky at first, i.e, was not sure what to do], nevertheless
- Go through implementations of workarounds to the current problem (those by 
Rust and AdaCore)
- Understand the dependencies of both implementations, and weigh their pros and 
cons 
- Work together with mentors on the current approaches I have, and get on the 
same page as them
- Discuss with Rust & AdaCore users on their workarounds to the current 
problems, to get a better insight

Done: 
- Researched about Rust's wrapper, and found most of its pros and cons (from 
[here](https://github.com/rust-lang/rust/commits/master/src/etc/rust-gdb), we 
can see that it was modified only once in the last 10 years due to an arg 
conflict, rest were quality-of-life improvements)
- Decided not to go ahead with Rust's solution due to lack of benefits and 
conflicting design choices
- Worked with mentors and finalised an approach (adding Python script to 
.debug_gdb_scripts section)
- Looked into using linker command scripts to modify section content at 
compile/linking time without modifying script source (reading from here: 
https://users.informatik.haw-hamburg.de/~krabat/FH-Labor/gnupro/5_GNUPro_Utilities/c_Using_LD/ldLinker_scripts.html#Output_section_data)

Blockers: 
- Lack of resources/discussions from previous people struggling with the same 
problem 


Planned: 
- Find out way to reference pre-installed GCC files from embedded script 
without external dependencies
- Find out reliable method to modify output section content through linker 
command files (or something under the hood, not involving the user) 
```

Week 6: 

```
[Update is only for work since this Monday, and Wednesday-Thursday 2 weeks back]
Planned: 
1. Write stdcxx.py to register pretty-printers after finding path to GCC
2. Modify linkcmds to add custom section to ELF every time when compiling
2. Start work on RSB to figure out GCC version dynamically (at build time)

Done: 
1. Wrote stdcxx.py
2. Modified linkcmds.base 
3. Working on RSB detailing to find GCC version
4. Drafting MRs for adding stdcxx.py as well as linkcmds.base modifications for 
ARM, currently building from source and testing 

Blockers: 
None 

Planned for coming week:
1. Merge both MRs 
2. Finalise RSB detailings to identify GCC version(s)
3. Test this feature on various BSPS/architectures to identify which platforms 
it works on and how I can identify it 
```

Week 7: 

```
Planned:
1. Merge both MRs [this got corrected to just one MR, which is a WIP currently]
2. Finalise RSB detailings to identify GCC version(s)
3. Test this feature on various BSPS/architectures to identify which platforms 
it works on and how I can identify it 


Done: 
1. Tested feature across following architectures/BSPs:
    a. aarch64/raspberrypi4b   - 64-bit LSB
    b. bfin/eZKit533           - 32-bit LSB
    c. powerpc/qemuppc         - 32-bit MSB
    d. sparc/leon3             - 32-bit MSB
    e. sparc64/niagara         - 64-bit MSB (relaxed memory ordering)
    f. x86_64/amd64            - 64-bit LSB
    g. i386/pc386              - 32-bit LSB 
    h. riscv/mpfs64imafdc      - 64-bit LSB
    i. x86_64/amd64            - 64-bit LSB
    j. arm/xilinx_zynq_a9_qemu - 32-bit LSB
    k. sh/simsh4               - 32-bit LSB
    l. or1k/generic_or1k       - 32-bit MSB
    m. v850/v850e2v3sim        - 32-bit LSB
    n. nios2/nios2_iss         - 32-bit LSB
    o. moxie/moxiesim          - 32-bit MSB

2. Identified parts of RSB scripts to work on to retrieve GCC Version info, and 
came up with a few ideas to incorporate into script
3. Started making final commits to the MR to modify linker scripts for every 
architecture (https://gitlab.rtems.org/rtems/rtos/rtems/-/merge_requests/98), 
remaining linker scripts are under-way, following which commit for modification 
to cpukit/sapi/src/exinit.c is ready but waiting for linker mods first

Blockers: 
Spent almost a day's worth of time building/fixing LLVM & Python version update 
issues

Planned for coming week: 
1. MR with changes to RSB script (gcc-common-1.cfg)
2. Merge MR which will add section to ELFs
3. Modify documentation mentioning to add line (`set auto-load safe-path /`) to 
~/.gdbinit. [I am not yet sure where this addition would come, but think it 
would be necessary because users will try and load their executable into GDB 
and get an error about the inlined script not being inside auto-load safe-path]
```

-- 
View it on GitLab: https://gitlab.rtems.org/groups/rtems/-/epics/1#note_108823
You're receiving this email because of your account on gitlab.rtems.org.


_______________________________________________
bugs mailing list
[email protected]
http://lists.rtems.org/mailman/listinfo/bugs

Reply via email to