)]}'
{"id":"binutils-gdb~5831","triplet_id":"binutils-gdb~master~I5529632c4f6505ec6cab696ab825aa2cb88567cf","project":"binutils-gdb","branch":"master","attention_set":{},"removed_from_attention_set":{"1000090":{"account":{"_account_id":1000090,"name":"Sébastien D","email":"sdarche@efficios.com","username":"Sebdar","avatars":[{"url":"https://www.gravatar.com/avatar/154d9c1bff6c233d2054afdc88226df9.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/154d9c1bff6c233d2054afdc88226df9.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/154d9c1bff6c233d2054afdc88226df9.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/154d9c1bff6c233d2054afdc88226df9.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d120","height":120}]},"last_update":"2025-09-29 13:46:53.000000000","reason":"\u003cGERRIT_ACCOUNT_1000090\u003e replied on the change","reason_account":{"_account_id":1000090,"name":"Sébastien D","email":"sdarche@efficios.com","username":"Sebdar","avatars":[{"url":"https://www.gravatar.com/avatar/154d9c1bff6c233d2054afdc88226df9.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/154d9c1bff6c233d2054afdc88226df9.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/154d9c1bff6c233d2054afdc88226df9.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/154d9c1bff6c233d2054afdc88226df9.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d120","height":120}]}},"1000001":{"account":{"_account_id":1000001,"name":"Simon Marchi","email":"simon.marchi@efficios.com","username":"simark","avatars":[{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d120","height":120}]},"last_update":"2025-10-03 14:21:22.000000000","reason":"Change was abandoned"}},"hashtags":[],"change_id":"I5529632c4f6505ec6cab696ab825aa2cb88567cf","subject":"gdb: fix per-inferior settings through MI/Python/Guile/with command/$_gdb_setting","status":"ABANDONED","created":"2021-05-12 17:14:15.000000000","updated":"2025-10-03 14:21:22.000000000","total_comment_count":32,"unresolved_comment_count":1,"has_review_started":true,"meta_rev_id":"bdf8b8aefd4ba74fe99967cbeb9018c923857088","_number":5831,"virtual_id_number":5831,"owner":{"_account_id":1000001,"name":"Simon Marchi","email":"simon.marchi@efficios.com","username":"simark","avatars":[{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d120","height":120}]},"actions":{},"labels":{"Code-Review":{"all":[{"value":0,"permitted_voting_range":{"min":-2,"max":2},"_account_id":1000090,"name":"Sébastien D","email":"sdarche@efficios.com","username":"Sebdar","avatars":[{"url":"https://www.gravatar.com/avatar/154d9c1bff6c233d2054afdc88226df9.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/154d9c1bff6c233d2054afdc88226df9.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/154d9c1bff6c233d2054afdc88226df9.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/154d9c1bff6c233d2054afdc88226df9.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d120","height":120}]},{"value":0,"permitted_voting_range":{"min":-1,"max":1},"_account_id":1000002,"name":"jenkins","email":"jenkins@lttng.org","username":"jenkins","avatars":[{"url":"https://www.gravatar.com/avatar/e3f1da3d4191917309975c0380f40764.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/e3f1da3d4191917309975c0380f40764.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/e3f1da3d4191917309975c0380f40764.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/e3f1da3d4191917309975c0380f40764.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d120","height":120}],"tags":["SERVICE_USER"]}],"values":{"-2":"This shall not be merged","-1":"I would prefer this is not merged as is"," 0":"No score","+1":"Looks good to me, but someone else must approve","+2":"Looks good to me, approved"},"description":"","default_value":0,"optional":true},"Verified":{"rejected":{"_account_id":1000002,"name":"jenkins","email":"jenkins@lttng.org","username":"jenkins","avatars":[{"url":"https://www.gravatar.com/avatar/e3f1da3d4191917309975c0380f40764.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/e3f1da3d4191917309975c0380f40764.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/e3f1da3d4191917309975c0380f40764.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/e3f1da3d4191917309975c0380f40764.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d120","height":120}],"tags":["SERVICE_USER"]},"all":[{"value":0,"permitted_voting_range":{"min":-2,"max":2},"_account_id":1000090,"name":"Sébastien D","email":"sdarche@efficios.com","username":"Sebdar","avatars":[{"url":"https://www.gravatar.com/avatar/154d9c1bff6c233d2054afdc88226df9.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/154d9c1bff6c233d2054afdc88226df9.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/154d9c1bff6c233d2054afdc88226df9.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/154d9c1bff6c233d2054afdc88226df9.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d120","height":120}]},{"tag":"autogenerated:jenkins-gerrit-trigger","value":-2,"date":"2025-09-23 20:49:08.000000000","permitted_voting_range":{"min":-2,"max":2},"_account_id":1000002,"name":"jenkins","email":"jenkins@lttng.org","username":"jenkins","avatars":[{"url":"https://www.gravatar.com/avatar/e3f1da3d4191917309975c0380f40764.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/e3f1da3d4191917309975c0380f40764.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/e3f1da3d4191917309975c0380f40764.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/e3f1da3d4191917309975c0380f40764.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d120","height":120}],"tags":["SERVICE_USER"]}],"values":{"-2":"Failure","-1":"Not built"," 0":"No score","+1":"Unstable","+2":"Success"},"description":"CI Build results","default_value":0,"optional":true},"CI-Build":{"approved":{"_account_id":1000090,"name":"Sébastien D","email":"sdarche@efficios.com","username":"Sebdar","avatars":[{"url":"https://www.gravatar.com/avatar/154d9c1bff6c233d2054afdc88226df9.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/154d9c1bff6c233d2054afdc88226df9.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/154d9c1bff6c233d2054afdc88226df9.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/154d9c1bff6c233d2054afdc88226df9.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d120","height":120}]},"all":[{"value":1,"date":"2025-09-23 18:43:37.000000000","permitted_voting_range":{"min":0,"max":1},"_account_id":1000090,"name":"Sébastien D","email":"sdarche@efficios.com","username":"Sebdar","avatars":[{"url":"https://www.gravatar.com/avatar/154d9c1bff6c233d2054afdc88226df9.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/154d9c1bff6c233d2054afdc88226df9.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/154d9c1bff6c233d2054afdc88226df9.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/154d9c1bff6c233d2054afdc88226df9.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d120","height":120}]},{"_account_id":1000002,"name":"jenkins","email":"jenkins@lttng.org","username":"jenkins","avatars":[{"url":"https://www.gravatar.com/avatar/e3f1da3d4191917309975c0380f40764.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/e3f1da3d4191917309975c0380f40764.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/e3f1da3d4191917309975c0380f40764.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/e3f1da3d4191917309975c0380f40764.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d120","height":120}],"tags":["SERVICE_USER"]}],"values":{" 0":"No score","+1":"Trigger a CI build"},"description":"Trigger CI builds","default_value":0,"optional":true},"Smoke-Build-Lvl1":{"all":[{"value":0,"permitted_voting_range":{"min":0,"max":1},"_account_id":1000090,"name":"Sébastien D","email":"sdarche@efficios.com","username":"Sebdar","avatars":[{"url":"https://www.gravatar.com/avatar/154d9c1bff6c233d2054afdc88226df9.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/154d9c1bff6c233d2054afdc88226df9.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/154d9c1bff6c233d2054afdc88226df9.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/154d9c1bff6c233d2054afdc88226df9.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d120","height":120}]},{"_account_id":1000002,"name":"jenkins","email":"jenkins@lttng.org","username":"jenkins","avatars":[{"url":"https://www.gravatar.com/avatar/e3f1da3d4191917309975c0380f40764.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/e3f1da3d4191917309975c0380f40764.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/e3f1da3d4191917309975c0380f40764.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/e3f1da3d4191917309975c0380f40764.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d120","height":120}],"tags":["SERVICE_USER"]}],"values":{" 0":"No score","+1":"Trigger a level 1 smoke build"},"description":"Trigger Level 1 Smoke builds","default_value":0,"optional":true},"Smoke-Build-Lvl2":{"all":[{"value":0,"permitted_voting_range":{"min":0,"max":1},"_account_id":1000090,"name":"Sébastien D","email":"sdarche@efficios.com","username":"Sebdar","avatars":[{"url":"https://www.gravatar.com/avatar/154d9c1bff6c233d2054afdc88226df9.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/154d9c1bff6c233d2054afdc88226df9.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/154d9c1bff6c233d2054afdc88226df9.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/154d9c1bff6c233d2054afdc88226df9.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d120","height":120}]},{"_account_id":1000002,"name":"jenkins","email":"jenkins@lttng.org","username":"jenkins","avatars":[{"url":"https://www.gravatar.com/avatar/e3f1da3d4191917309975c0380f40764.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/e3f1da3d4191917309975c0380f40764.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/e3f1da3d4191917309975c0380f40764.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/e3f1da3d4191917309975c0380f40764.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d120","height":120}],"tags":["SERVICE_USER"]}],"values":{" 0":"No score","+1":"Trigger a level 2 smoke build"},"description":"Trigger Level 2 Smoke builds","default_value":0,"optional":true}},"removable_reviewers":[],"reviewers":{"REVIEWER":[{"_account_id":1000002,"name":"jenkins","email":"jenkins@lttng.org","username":"jenkins","avatars":[{"url":"https://www.gravatar.com/avatar/e3f1da3d4191917309975c0380f40764.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/e3f1da3d4191917309975c0380f40764.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/e3f1da3d4191917309975c0380f40764.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/e3f1da3d4191917309975c0380f40764.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d120","height":120}],"tags":["SERVICE_USER"]},{"_account_id":1000090,"name":"Sébastien D","email":"sdarche@efficios.com","username":"Sebdar","avatars":[{"url":"https://www.gravatar.com/avatar/154d9c1bff6c233d2054afdc88226df9.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/154d9c1bff6c233d2054afdc88226df9.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/154d9c1bff6c233d2054afdc88226df9.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/154d9c1bff6c233d2054afdc88226df9.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d120","height":120}]}]},"pending_reviewers":{},"reviewer_updates":[{"updated":"2025-09-22 17:10:44.000000000","updated_by":{"_account_id":1000090,"name":"Sébastien D","email":"sdarche@efficios.com","username":"Sebdar","avatars":[{"url":"https://www.gravatar.com/avatar/154d9c1bff6c233d2054afdc88226df9.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/154d9c1bff6c233d2054afdc88226df9.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/154d9c1bff6c233d2054afdc88226df9.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/154d9c1bff6c233d2054afdc88226df9.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d120","height":120}]},"reviewer":{"_account_id":1000090,"name":"Sébastien D","email":"sdarche@efficios.com","username":"Sebdar","avatars":[{"url":"https://www.gravatar.com/avatar/154d9c1bff6c233d2054afdc88226df9.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/154d9c1bff6c233d2054afdc88226df9.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/154d9c1bff6c233d2054afdc88226df9.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/154d9c1bff6c233d2054afdc88226df9.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d120","height":120}]},"state":"CC"},{"updated":"2025-09-23 16:09:29.000000000","updated_by":{"_account_id":1000090,"name":"Sébastien D","email":"sdarche@efficios.com","username":"Sebdar","avatars":[{"url":"https://www.gravatar.com/avatar/154d9c1bff6c233d2054afdc88226df9.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/154d9c1bff6c233d2054afdc88226df9.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/154d9c1bff6c233d2054afdc88226df9.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/154d9c1bff6c233d2054afdc88226df9.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d120","height":120}]},"reviewer":{"_account_id":1000090,"name":"Sébastien D","email":"sdarche@efficios.com","username":"Sebdar","avatars":[{"url":"https://www.gravatar.com/avatar/154d9c1bff6c233d2054afdc88226df9.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/154d9c1bff6c233d2054afdc88226df9.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/154d9c1bff6c233d2054afdc88226df9.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/154d9c1bff6c233d2054afdc88226df9.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d120","height":120}]},"state":"REVIEWER"},{"updated":"2025-09-23 16:09:40.000000000","updated_by":{"_account_id":1000002,"name":"jenkins","email":"jenkins@lttng.org","username":"jenkins","avatars":[{"url":"https://www.gravatar.com/avatar/e3f1da3d4191917309975c0380f40764.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/e3f1da3d4191917309975c0380f40764.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/e3f1da3d4191917309975c0380f40764.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/e3f1da3d4191917309975c0380f40764.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d120","height":120}],"tags":["SERVICE_USER"]},"reviewer":{"_account_id":1000002,"name":"jenkins","email":"jenkins@lttng.org","username":"jenkins","avatars":[{"url":"https://www.gravatar.com/avatar/e3f1da3d4191917309975c0380f40764.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/e3f1da3d4191917309975c0380f40764.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/e3f1da3d4191917309975c0380f40764.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/e3f1da3d4191917309975c0380f40764.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d120","height":120}],"tags":["SERVICE_USER"]},"state":"CC"},{"updated":"2025-09-23 18:13:56.000000000","updated_by":{"_account_id":1000002,"name":"jenkins","email":"jenkins@lttng.org","username":"jenkins","avatars":[{"url":"https://www.gravatar.com/avatar/e3f1da3d4191917309975c0380f40764.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/e3f1da3d4191917309975c0380f40764.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/e3f1da3d4191917309975c0380f40764.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/e3f1da3d4191917309975c0380f40764.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d120","height":120}],"tags":["SERVICE_USER"]},"reviewer":{"_account_id":1000002,"name":"jenkins","email":"jenkins@lttng.org","username":"jenkins","avatars":[{"url":"https://www.gravatar.com/avatar/e3f1da3d4191917309975c0380f40764.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/e3f1da3d4191917309975c0380f40764.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/e3f1da3d4191917309975c0380f40764.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/e3f1da3d4191917309975c0380f40764.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d120","height":120}],"tags":["SERVICE_USER"]},"state":"REVIEWER"}],"messages":[{"id":"4b8e0967cebb814cc0583e5a4cffe23ac2c51de5","tag":"autogenerated:gerrit:newPatchSet","author":{"_account_id":1000001,"name":"Simon Marchi","email":"simon.marchi@efficios.com","username":"simark","avatars":[{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d120","height":120}]},"date":"2021-05-12 17:14:15.000000000","message":"Uploaded patch set 1.","accounts_in_message":[],"_revision_number":1},{"id":"dd210ae5a77006bd38b3e88303a2a2b0eede0c93","tag":"autogenerated:gerrit:newPatchSet","author":{"_account_id":1000001,"name":"Simon Marchi","email":"simon.marchi@efficios.com","username":"simark","avatars":[{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d120","height":120}]},"date":"2021-05-18 18:25:27.000000000","message":"Uploaded patch set 2.","accounts_in_message":[],"_revision_number":2},{"id":"5391468d03f509e0fc3eed7a5aad3b632482b7f3","tag":"autogenerated:gerrit:newPatchSet","author":{"_account_id":1000001,"name":"Simon Marchi","email":"simon.marchi@efficios.com","username":"simark","avatars":[{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d120","height":120}]},"date":"2021-05-18 20:13:20.000000000","message":"Uploaded patch set 3: Patch Set 2 was rebased.","accounts_in_message":[],"_revision_number":3},{"id":"53e90e3a19fc55728395c10ad2fed2b4326a4db0","tag":"autogenerated:gerrit:newPatchSet","author":{"_account_id":1000001,"name":"Simon Marchi","email":"simon.marchi@efficios.com","username":"simark","avatars":[{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d120","height":120}]},"date":"2021-05-19 01:22:20.000000000","message":"Uploaded patch set 4.","accounts_in_message":[],"_revision_number":4},{"id":"bca12a84f9568b5094008710f309f6472a1fc995","tag":"autogenerated:gerrit:newPatchSet","author":{"_account_id":1000001,"name":"Simon Marchi","email":"simon.marchi@efficios.com","username":"simark","avatars":[{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d120","height":120}]},"date":"2021-05-19 16:04:53.000000000","message":"Uploaded patch set 5.","accounts_in_message":[],"_revision_number":5},{"id":"9c888b6dfa68f064fd5a1b3b3f483cea87b0e933","tag":"autogenerated:gerrit:newPatchSet","author":{"_account_id":1000001,"name":"Simon Marchi","email":"simon.marchi@efficios.com","username":"simark","avatars":[{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d120","height":120}]},"date":"2021-05-19 19:11:44.000000000","message":"Uploaded patch set 6: Patch Set 5 was rebased.","accounts_in_message":[],"_revision_number":6},{"id":"98ad6a59631e3e82cbd510cd5d8beb82a0b8d53a","tag":"autogenerated:gerrit:newPatchSet","author":{"_account_id":1000001,"name":"Simon Marchi","email":"simon.marchi@efficios.com","username":"simark","avatars":[{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d120","height":120}]},"date":"2021-06-25 17:56:19.000000000","message":"Uploaded patch set 7: Patch Set 6 was rebased.","accounts_in_message":[],"_revision_number":7},{"id":"4b7e437f4d5abfb7f5b77dab55f70f3721409bf7","tag":"autogenerated:gerrit:newPatchSet","author":{"_account_id":1000001,"name":"Simon Marchi","email":"simon.marchi@efficios.com","username":"simark","avatars":[{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d120","height":120}]},"date":"2021-06-25 18:32:34.000000000","message":"Uploaded patch set 8: Patch Set 7 was rebased.","accounts_in_message":[],"_revision_number":8},{"id":"852b8ce2e2f003a75e468029831bd24302720702","tag":"autogenerated:gerrit:newPatchSet","author":{"_account_id":1000001,"name":"Simon Marchi","email":"simon.marchi@efficios.com","username":"simark","avatars":[{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d120","height":120}]},"date":"2021-06-25 20:14:49.000000000","message":"Uploaded patch set 9: Patch Set 8 was rebased.","accounts_in_message":[],"_revision_number":9},{"id":"8717f8a356cda1e9df2e97fd1cf1c13f1c381597","tag":"autogenerated:gerrit:newPatchSet","author":{"_account_id":1000001,"name":"Simon Marchi","email":"simon.marchi@efficios.com","username":"simark","avatars":[{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d120","height":120}]},"date":"2021-06-25 20:38:14.000000000","message":"Uploaded patch set 10: Commit message was updated.","accounts_in_message":[],"_revision_number":10},{"id":"f82a0264fbef97cbc0d6b8d7a0dce571961c2f21","tag":"autogenerated:gerrit:newPatchSet","author":{"_account_id":1000001,"name":"Simon Marchi","email":"simon.marchi@efficios.com","username":"simark","avatars":[{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d120","height":120}]},"date":"2021-06-25 22:12:19.000000000","message":"Uploaded patch set 11.","accounts_in_message":[],"_revision_number":11},{"id":"ce399ed5a0cb5f5a05efeafa100898f9d69c9ac8","tag":"autogenerated:gerrit:newPatchSet","author":{"_account_id":1000001,"name":"Simon Marchi","email":"simon.marchi@efficios.com","username":"simark","avatars":[{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d120","height":120}]},"date":"2021-06-26 02:06:58.000000000","message":"Uploaded patch set 12.","accounts_in_message":[],"_revision_number":12},{"id":"8f24020769beae5eaa989bf624321808a992b722","tag":"autogenerated:gerrit:newPatchSet","author":{"_account_id":1000001,"name":"Simon Marchi","email":"simon.marchi@efficios.com","username":"simark","avatars":[{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d120","height":120}]},"date":"2021-06-28 19:34:39.000000000","message":"Uploaded patch set 13: Patch Set 12 was rebased.","accounts_in_message":[],"_revision_number":13},{"id":"4ebb66485b67d257ce8122e4256df513c47f8ea1","tag":"autogenerated:gerrit:newPatchSet","author":{"_account_id":1000001,"name":"Simon Marchi","email":"simon.marchi@efficios.com","username":"simark","avatars":[{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d120","height":120}]},"date":"2021-06-29 14:54:09.000000000","message":"Uploaded patch set 14.","accounts_in_message":[],"_revision_number":14},{"id":"bc50c2e5ff8e70470359a97b25a70fb34d910985","tag":"autogenerated:gerrit:newPatchSet","author":{"_account_id":1000001,"name":"Simon Marchi","email":"simon.marchi@efficios.com","username":"simark","avatars":[{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d120","height":120}]},"date":"2021-06-29 18:07:15.000000000","message":"Uploaded patch set 15.","accounts_in_message":[],"_revision_number":15},{"id":"6043612906a5feee02e95b3800f41ffdeab1f913","tag":"autogenerated:gerrit:newPatchSet","author":{"_account_id":1000001,"name":"Simon Marchi","email":"simon.marchi@efficios.com","username":"simark","avatars":[{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d120","height":120}]},"date":"2021-06-29 18:58:28.000000000","message":"Uploaded patch set 16.","accounts_in_message":[],"_revision_number":16},{"id":"9e780695bcd12130135dc7c311b5ef02c3dd7910","tag":"autogenerated:gerrit:newPatchSet","author":{"_account_id":1000001,"name":"Simon Marchi","email":"simon.marchi@efficios.com","username":"simark","avatars":[{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d120","height":120}]},"date":"2021-06-30 03:49:55.000000000","message":"Uploaded patch set 17.","accounts_in_message":[],"_revision_number":17},{"id":"44d05a9a241b2370907604914ddfbac116c034a7","tag":"autogenerated:gerrit:newPatchSet","author":{"_account_id":1000001,"name":"Simon Marchi","email":"simon.marchi@efficios.com","username":"simark","avatars":[{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d120","height":120}]},"date":"2021-06-30 13:20:29.000000000","message":"Uploaded patch set 18: Patch Set 17 was rebased.","accounts_in_message":[],"_revision_number":18},{"id":"f049d9309fbc6316175d5857bb599e49b19fdc7c","tag":"autogenerated:gerrit:newPatchSet","author":{"_account_id":1000001,"name":"Simon Marchi","email":"simon.marchi@efficios.com","username":"simark","avatars":[{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d120","height":120}]},"date":"2021-06-30 18:49:44.000000000","message":"Uploaded patch set 19.","accounts_in_message":[],"_revision_number":19},{"id":"273773084c3cbf11dc4383fefe3afc551e26a864","tag":"autogenerated:gerrit:newPatchSet","author":{"_account_id":1000001,"name":"Simon Marchi","email":"simon.marchi@efficios.com","username":"simark","avatars":[{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d120","height":120}]},"date":"2021-06-30 20:59:03.000000000","message":"Uploaded patch set 20.","accounts_in_message":[],"_revision_number":20},{"id":"eee790ab28b66d81b7ede6aa2278d42a4f5c0c40","tag":"autogenerated:gerrit:newPatchSet","author":{"_account_id":1000001,"name":"Simon Marchi","email":"simon.marchi@efficios.com","username":"simark","avatars":[{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d120","height":120}]},"date":"2021-07-06 18:44:38.000000000","message":"Uploaded patch set 21.","accounts_in_message":[],"_revision_number":21},{"id":"436c8aa4825d9109e66ff8cd3fe33194fd41ca64","tag":"autogenerated:gerrit:newPatchSet","author":{"_account_id":1000001,"name":"Simon Marchi","email":"simon.marchi@efficios.com","username":"simark","avatars":[{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d120","height":120}]},"date":"2021-07-08 14:15:28.000000000","message":"Uploaded patch set 22: Patch Set 21 was rebased.","accounts_in_message":[],"_revision_number":22},{"id":"2b78dd981021e0e90ee232b3b47dc43a1a465b69","tag":"autogenerated:gerrit:newPatchSet","author":{"_account_id":1000001,"name":"Simon Marchi","email":"simon.marchi@efficios.com","username":"simark","avatars":[{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d120","height":120}]},"date":"2021-07-08 15:19:19.000000000","message":"Uploaded patch set 23.","accounts_in_message":[],"_revision_number":23},{"id":"378d79f6b62acc849f3ae851718ee56075984eca","tag":"autogenerated:gerrit:newPatchSet","author":{"_account_id":1000001,"name":"Simon Marchi","email":"simon.marchi@efficios.com","username":"simark","avatars":[{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d120","height":120}]},"date":"2021-07-09 04:20:23.000000000","message":"Uploaded patch set 24.","accounts_in_message":[],"_revision_number":24},{"id":"c7112c3bb835fc63aafc8c650945ca7c1e4121ba","tag":"autogenerated:gerrit:newPatchSet","author":{"_account_id":1000001,"name":"Simon Marchi","email":"simon.marchi@efficios.com","username":"simark","avatars":[{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d120","height":120}]},"date":"2021-07-09 15:07:16.000000000","message":"Uploaded patch set 25: Patch Set 24 was rebased.","accounts_in_message":[],"_revision_number":25},{"id":"794463bee4bbf3ff3b5b6c1fc89b4e03a24f912b","tag":"autogenerated:gerrit:newPatchSet","author":{"_account_id":1000001,"name":"Simon Marchi","email":"simon.marchi@efficios.com","username":"simark","avatars":[{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d120","height":120}]},"date":"2021-07-11 02:56:26.000000000","message":"Uploaded patch set 26.","accounts_in_message":[],"_revision_number":26},{"id":"8704d22a91c75fb604d9aed7c4540c9d10decc18","tag":"autogenerated:gerrit:newPatchSet","author":{"_account_id":1000001,"name":"Simon Marchi","email":"simon.marchi@efficios.com","username":"simark","avatars":[{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d120","height":120}]},"date":"2021-07-12 00:17:22.000000000","message":"Uploaded patch set 27: Patch Set 26 was rebased.","accounts_in_message":[],"_revision_number":27},{"id":"d98912af4f9d4cb0a4946598ba2d0b9eaa122303","tag":"autogenerated:gerrit:newPatchSet","author":{"_account_id":1000001,"name":"Simon Marchi","email":"simon.marchi@efficios.com","username":"simark","avatars":[{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d120","height":120}]},"date":"2021-07-12 21:57:37.000000000","message":"Uploaded patch set 28: Patch Set 27 was rebased.","accounts_in_message":[],"_revision_number":28},{"id":"6cfa72495560010871e7212d62932d3dd3fd1cab","tag":"autogenerated:gerrit:newPatchSet","author":{"_account_id":1000001,"name":"Simon Marchi","email":"simon.marchi@efficios.com","username":"simark","avatars":[{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d120","height":120}]},"date":"2021-07-13 01:32:06.000000000","message":"Uploaded patch set 29: Patch Set 28 was rebased.","accounts_in_message":[],"_revision_number":29},{"id":"08f151e063c20fef1c340d8acfe88a1750639cc0","tag":"autogenerated:gerrit:newPatchSet","author":{"_account_id":1000001,"name":"Simon Marchi","email":"simon.marchi@efficios.com","username":"simark","avatars":[{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d120","height":120}]},"date":"2021-07-13 02:13:36.000000000","message":"Uploaded patch set 30: Patch Set 29 was rebased.","accounts_in_message":[],"_revision_number":30},{"id":"a99f5c3ce47b879e1a0668b5b157e6d04839d245","tag":"autogenerated:gerrit:newPatchSet","author":{"_account_id":1000001,"name":"Simon Marchi","email":"simon.marchi@efficios.com","username":"simark","avatars":[{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d120","height":120}]},"date":"2021-07-13 15:04:29.000000000","message":"Uploaded patch set 31: Patch Set 30 was rebased.","accounts_in_message":[],"_revision_number":31},{"id":"bf5b2b416b18febf31a9f3c5410e5765d3241368","tag":"autogenerated:gerrit:newPatchSet","author":{"_account_id":1000001,"name":"Simon Marchi","email":"simon.marchi@efficios.com","username":"simark","avatars":[{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d120","height":120}]},"date":"2021-07-13 19:15:25.000000000","message":"Uploaded patch set 32: Patch Set 31 was rebased.","accounts_in_message":[],"_revision_number":32},{"id":"f42aebf4b24d0591cf4cbb871e229b7a487b0cb2","tag":"autogenerated:gerrit:newPatchSet","author":{"_account_id":1000001,"name":"Simon Marchi","email":"simon.marchi@efficios.com","username":"simark","avatars":[{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d120","height":120}]},"date":"2021-07-13 19:50:26.000000000","message":"Uploaded patch set 33: Patch Set 32 was rebased.","accounts_in_message":[],"_revision_number":33},{"id":"44f1613777b23cb30d5b8b9127fb8b6a42961b3a","tag":"autogenerated:gerrit:newPatchSet","author":{"_account_id":1000001,"name":"Simon Marchi","email":"simon.marchi@efficios.com","username":"simark","avatars":[{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d120","height":120}]},"date":"2021-07-19 21:30:49.000000000","message":"Uploaded patch set 34.","accounts_in_message":[],"_revision_number":34},{"id":"87692198442cb605b5836c812ec1c1e8d8970402","tag":"autogenerated:gerrit:newPatchSet","author":{"_account_id":1000001,"name":"Simon Marchi","email":"simon.marchi@efficios.com","username":"simark","avatars":[{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d120","height":120}]},"date":"2021-07-20 03:05:16.000000000","message":"Uploaded patch set 35: Patch Set 34 was rebased.","accounts_in_message":[],"_revision_number":35},{"id":"54fe1ed73a5fd8d0132893c16a3c8fdc67121752","tag":"autogenerated:gerrit:newPatchSet","author":{"_account_id":1000001,"name":"Simon Marchi","email":"simon.marchi@efficios.com","username":"simark","avatars":[{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d120","height":120}]},"date":"2021-07-21 02:40:59.000000000","message":"Uploaded patch set 36.","accounts_in_message":[],"_revision_number":36},{"id":"13fb96e9cb63cc76d23e15e37980e38e55799b71","tag":"autogenerated:gerrit:newPatchSet","author":{"_account_id":1000001,"name":"Simon Marchi","email":"simon.marchi@efficios.com","username":"simark","avatars":[{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d120","height":120}]},"date":"2021-07-22 15:28:54.000000000","message":"Uploaded patch set 37.","accounts_in_message":[],"_revision_number":37},{"id":"43fa685de1e887524e00a5d5956f8a3414d1e475","tag":"autogenerated:gerrit:newPatchSet","author":{"_account_id":1000001,"name":"Simon Marchi","email":"simon.marchi@efficios.com","username":"simark","avatars":[{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d120","height":120}]},"date":"2021-07-23 19:50:05.000000000","message":"Uploaded patch set 38: Patch Set 37 was rebased.","accounts_in_message":[],"_revision_number":38},{"id":"33cf45c099a76615480df21a88e00f2ff10ea160","tag":"autogenerated:gerrit:newPatchSet","author":{"_account_id":1000001,"name":"Simon Marchi","email":"simon.marchi@efficios.com","username":"simark","avatars":[{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d120","height":120}]},"date":"2021-07-23 20:27:03.000000000","message":"Uploaded patch set 39: New patch set was added with same tree, parent, and commit message as Patch Set 38.","accounts_in_message":[],"_revision_number":39},{"id":"53337da903d7878ec91d99fa1def1bd13e835a72","tag":"autogenerated:gerrit:newPatchSet","author":{"_account_id":1000001,"name":"Simon Marchi","email":"simon.marchi@efficios.com","username":"simark","avatars":[{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d120","height":120}]},"date":"2021-07-23 21:22:12.000000000","message":"Uploaded patch set 40.","accounts_in_message":[],"_revision_number":40},{"id":"c5d7946b316d9573a9765e2966a8b911067400b9","tag":"autogenerated:gerrit:newPatchSet","author":{"_account_id":1000001,"name":"Simon Marchi","email":"simon.marchi@efficios.com","username":"simark","avatars":[{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d120","height":120}]},"date":"2021-07-23 21:54:54.000000000","message":"Uploaded patch set 41: Commit message was updated.","accounts_in_message":[],"_revision_number":41},{"id":"86ff59f5aa2ad047bf849e33bbeb765649f05096","tag":"autogenerated:gerrit:newPatchSet","author":{"_account_id":1000001,"name":"Simon Marchi","email":"simon.marchi@efficios.com","username":"simark","avatars":[{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d120","height":120}]},"date":"2021-07-28 21:09:54.000000000","message":"Uploaded patch set 42: Patch Set 41 was rebased.","accounts_in_message":[],"_revision_number":42},{"id":"4a1d04f9dacb6dc7e6b78ae9332be15e2065687e","tag":"autogenerated:gerrit:newPatchSet","author":{"_account_id":1000001,"name":"Simon Marchi","email":"simon.marchi@efficios.com","username":"simark","avatars":[{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d120","height":120}]},"date":"2021-08-10 03:05:17.000000000","message":"Uploaded patch set 43.","accounts_in_message":[],"_revision_number":43},{"id":"3fed7775e0198535838f8854b51c89bc99ff331e","tag":"autogenerated:gerrit:newPatchSet","author":{"_account_id":1000001,"name":"Simon Marchi","email":"simon.marchi@efficios.com","username":"simark","avatars":[{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d120","height":120}]},"date":"2021-08-19 20:35:45.000000000","message":"Uploaded patch set 44: Patch Set 43 was rebased.","accounts_in_message":[],"_revision_number":44},{"id":"2c40aa25eb92fc093e6b0c6efeb574308efbbffc","tag":"autogenerated:gerrit:newPatchSet","author":{"_account_id":1000090,"name":"Sébastien D","email":"sdarche@efficios.com","username":"Sebdar","avatars":[{"url":"https://www.gravatar.com/avatar/154d9c1bff6c233d2054afdc88226df9.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/154d9c1bff6c233d2054afdc88226df9.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/154d9c1bff6c233d2054afdc88226df9.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/154d9c1bff6c233d2054afdc88226df9.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d120","height":120}]},"date":"2025-09-19 18:41:34.000000000","message":"Uploaded patch set 45.","accounts_in_message":[],"_revision_number":45},{"id":"4d4a0d7128e2913c1fb070cf54df2e4ff703564c","tag":"autogenerated:gerrit:newPatchSet","author":{"_account_id":1000090,"name":"Sébastien D","email":"sdarche@efficios.com","username":"Sebdar","avatars":[{"url":"https://www.gravatar.com/avatar/154d9c1bff6c233d2054afdc88226df9.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/154d9c1bff6c233d2054afdc88226df9.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/154d9c1bff6c233d2054afdc88226df9.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/154d9c1bff6c233d2054afdc88226df9.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d120","height":120}]},"date":"2025-09-19 19:15:38.000000000","message":"Uploaded patch set 46.","accounts_in_message":[],"_revision_number":46},{"id":"53640042225e954bad566fdc4ec27002f3d135d9","author":{"_account_id":1000001,"name":"Simon Marchi","email":"simon.marchi@efficios.com","username":"simark","avatars":[{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d120","height":120}]},"date":"2025-09-20 02:00:36.000000000","message":"Patch Set 46:\n\n(3 comments)","accounts_in_message":[],"_revision_number":46},{"id":"492361d293738c91b07a3c711c01804aa41a8ac2","tag":"autogenerated:gerrit:newPatchSet","author":{"_account_id":1000090,"name":"Sébastien D","email":"sdarche@efficios.com","username":"Sebdar","avatars":[{"url":"https://www.gravatar.com/avatar/154d9c1bff6c233d2054afdc88226df9.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/154d9c1bff6c233d2054afdc88226df9.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/154d9c1bff6c233d2054afdc88226df9.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/154d9c1bff6c233d2054afdc88226df9.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d120","height":120}]},"date":"2025-09-22 17:09:06.000000000","message":"Uploaded patch set 47: Commit message was updated.","accounts_in_message":[],"_revision_number":47},{"id":"11a53c2dbca6af2fe0c4bb8981a27f62f8e31627","tag":"autogenerated:gerrit:newPatchSet","author":{"_account_id":1000090,"name":"Sébastien D","email":"sdarche@efficios.com","username":"Sebdar","avatars":[{"url":"https://www.gravatar.com/avatar/154d9c1bff6c233d2054afdc88226df9.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/154d9c1bff6c233d2054afdc88226df9.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/154d9c1bff6c233d2054afdc88226df9.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/154d9c1bff6c233d2054afdc88226df9.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d120","height":120}]},"date":"2025-09-22 17:09:34.000000000","message":"Uploaded patch set 48.","accounts_in_message":[],"_revision_number":48},{"id":"cc837fe2e45fdf67e37cab45a778bed656e2215e","author":{"_account_id":1000090,"name":"Sébastien D","email":"sdarche@efficios.com","username":"Sebdar","avatars":[{"url":"https://www.gravatar.com/avatar/154d9c1bff6c233d2054afdc88226df9.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/154d9c1bff6c233d2054afdc88226df9.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/154d9c1bff6c233d2054afdc88226df9.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/154d9c1bff6c233d2054afdc88226df9.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d120","height":120}]},"date":"2025-09-22 17:10:44.000000000","message":"Patch Set 48:\n\n(3 comments)","accounts_in_message":[],"_revision_number":48},{"id":"b28bf237f8d684d4ca5a8351987e9344f8ac6143","author":{"_account_id":1000001,"name":"Simon Marchi","email":"simon.marchi@efficios.com","username":"simark","avatars":[{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d120","height":120}]},"date":"2025-09-22 20:21:48.000000000","message":"Patch Set 48:\n\n(11 comments)","accounts_in_message":[],"_revision_number":48},{"id":"72a6e98f0a49750ebdc3b6e2a010e18fb16821eb","tag":"autogenerated:gerrit:newPatchSet","author":{"_account_id":1000090,"name":"Sébastien D","email":"sdarche@efficios.com","username":"Sebdar","avatars":[{"url":"https://www.gravatar.com/avatar/154d9c1bff6c233d2054afdc88226df9.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/154d9c1bff6c233d2054afdc88226df9.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/154d9c1bff6c233d2054afdc88226df9.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/154d9c1bff6c233d2054afdc88226df9.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d120","height":120}]},"date":"2025-09-22 23:17:46.000000000","message":"Uploaded patch set 49.","accounts_in_message":[],"_revision_number":49},{"id":"1f62dad2ebb76058b76d758cb31e8cc911991bf8","tag":"autogenerated:gerrit:newPatchSet","author":{"_account_id":1000090,"name":"Sébastien D","email":"sdarche@efficios.com","username":"Sebdar","avatars":[{"url":"https://www.gravatar.com/avatar/154d9c1bff6c233d2054afdc88226df9.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/154d9c1bff6c233d2054afdc88226df9.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/154d9c1bff6c233d2054afdc88226df9.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/154d9c1bff6c233d2054afdc88226df9.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d120","height":120}]},"date":"2025-09-22 23:21:43.000000000","message":"Uploaded patch set 50.","accounts_in_message":[],"_revision_number":50},{"id":"3d575803ef472291d15faf459c297130cf943f79","tag":"autogenerated:gerrit:newPatchSet","author":{"_account_id":1000090,"name":"Sébastien D","email":"sdarche@efficios.com","username":"Sebdar","avatars":[{"url":"https://www.gravatar.com/avatar/154d9c1bff6c233d2054afdc88226df9.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/154d9c1bff6c233d2054afdc88226df9.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/154d9c1bff6c233d2054afdc88226df9.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/154d9c1bff6c233d2054afdc88226df9.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d120","height":120}]},"date":"2025-09-23 13:47:01.000000000","message":"Uploaded patch set 51.","accounts_in_message":[],"_revision_number":51},{"id":"0a3198bef1b147cb4c065cf8c0ccdd7f9f1f377b","tag":"autogenerated:gerrit:newPatchSet","author":{"_account_id":1000090,"name":"Sébastien D","email":"sdarche@efficios.com","username":"Sebdar","avatars":[{"url":"https://www.gravatar.com/avatar/154d9c1bff6c233d2054afdc88226df9.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/154d9c1bff6c233d2054afdc88226df9.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/154d9c1bff6c233d2054afdc88226df9.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/154d9c1bff6c233d2054afdc88226df9.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d120","height":120}]},"date":"2025-09-23 14:47:58.000000000","message":"Uploaded patch set 52.","accounts_in_message":[],"_revision_number":52},{"id":"dcd9fc929430739c11e3b54c4e47196074e32102","author":{"_account_id":1000090,"name":"Sébastien D","email":"sdarche@efficios.com","username":"Sebdar","avatars":[{"url":"https://www.gravatar.com/avatar/154d9c1bff6c233d2054afdc88226df9.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/154d9c1bff6c233d2054afdc88226df9.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/154d9c1bff6c233d2054afdc88226df9.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/154d9c1bff6c233d2054afdc88226df9.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d120","height":120}]},"date":"2025-09-23 14:48:15.000000000","message":"Patch Set 52:\n\n(12 comments)","accounts_in_message":[],"_revision_number":52},{"id":"db4f06e659388dd3dd4b7735e61b681e7a894951","author":{"_account_id":1000090,"name":"Sébastien D","email":"sdarche@efficios.com","username":"Sebdar","avatars":[{"url":"https://www.gravatar.com/avatar/154d9c1bff6c233d2054afdc88226df9.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/154d9c1bff6c233d2054afdc88226df9.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/154d9c1bff6c233d2054afdc88226df9.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/154d9c1bff6c233d2054afdc88226df9.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d120","height":120}]},"date":"2025-09-23 16:09:29.000000000","message":"Patch Set 52: CI-Build+1","accounts_in_message":[],"_revision_number":52},{"id":"dadc1a2ca120a874747a6970a141ca3f429d15e9","tag":"autogenerated:jenkins-gerrit-trigger","author":{"_account_id":1000002,"name":"jenkins","email":"jenkins@lttng.org","username":"jenkins","avatars":[{"url":"https://www.gravatar.com/avatar/e3f1da3d4191917309975c0380f40764.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/e3f1da3d4191917309975c0380f40764.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/e3f1da3d4191917309975c0380f40764.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/e3f1da3d4191917309975c0380f40764.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d120","height":120}],"tags":["SERVICE_USER"]},"date":"2025-09-23 16:09:40.000000000","message":"Patch Set 52:\n\nBuild Started https://ci.lttng.org/job/dev_review_binutils-gdb_master_linuxbuild_gcc/168/","accounts_in_message":[],"_revision_number":52},{"id":"e9e371e7d02aa7f18d2d21db5f74eae154fc145b","tag":"autogenerated:jenkins-gerrit-trigger","author":{"_account_id":1000002,"name":"jenkins","email":"jenkins@lttng.org","username":"jenkins","avatars":[{"url":"https://www.gravatar.com/avatar/e3f1da3d4191917309975c0380f40764.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/e3f1da3d4191917309975c0380f40764.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/e3f1da3d4191917309975c0380f40764.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/e3f1da3d4191917309975c0380f40764.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d120","height":120}],"tags":["SERVICE_USER"]},"date":"2025-09-23 18:13:56.000000000","message":"Patch Set 52: Verified-2\n\nBuild Failed \n\nhttps://ci.lttng.org/job/dev_review_binutils-gdb_master_linuxbuild_gcc/168/ : FAILURE","accounts_in_message":[],"_revision_number":52},{"id":"44d5817d384757e341634b5cb686e3b56082a02c","tag":"autogenerated:gerrit:newPatchSet","author":{"_account_id":1000090,"name":"Sébastien D","email":"sdarche@efficios.com","username":"Sebdar","avatars":[{"url":"https://www.gravatar.com/avatar/154d9c1bff6c233d2054afdc88226df9.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/154d9c1bff6c233d2054afdc88226df9.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/154d9c1bff6c233d2054afdc88226df9.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/154d9c1bff6c233d2054afdc88226df9.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d120","height":120}]},"date":"2025-09-23 18:19:30.000000000","message":"Uploaded patch set 53.\n\nOutdated Votes:\n* CI-Build+1 (copy condition: \"changekind:NO_CHANGE OR changekind:NO_CODE_CHANGE\")\n* Verified-2 (copy condition: \"changekind:NO_CHANGE OR changekind:NO_CODE_CHANGE\")\n","accounts_in_message":[],"_revision_number":53},{"id":"8eefc23a34874c80370b53747128a070c5d0b826","tag":"autogenerated:gerrit:newPatchSet","author":{"_account_id":1000090,"name":"Sébastien D","email":"sdarche@efficios.com","username":"Sebdar","avatars":[{"url":"https://www.gravatar.com/avatar/154d9c1bff6c233d2054afdc88226df9.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/154d9c1bff6c233d2054afdc88226df9.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/154d9c1bff6c233d2054afdc88226df9.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/154d9c1bff6c233d2054afdc88226df9.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d120","height":120}]},"date":"2025-09-23 18:38:49.000000000","message":"Uploaded patch set 54.","accounts_in_message":[],"_revision_number":54},{"id":"85a76b911a730372500b14b1d16215b4cc8dea60","author":{"_account_id":1000090,"name":"Sébastien D","email":"sdarche@efficios.com","username":"Sebdar","avatars":[{"url":"https://www.gravatar.com/avatar/154d9c1bff6c233d2054afdc88226df9.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/154d9c1bff6c233d2054afdc88226df9.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/154d9c1bff6c233d2054afdc88226df9.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/154d9c1bff6c233d2054afdc88226df9.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d120","height":120}]},"date":"2025-09-23 18:43:37.000000000","message":"Patch Set 54: CI-Build+1","accounts_in_message":[],"_revision_number":54},{"id":"dea10810baa36c5eb6110079ad3eac8b67eaf44d","tag":"autogenerated:jenkins-gerrit-trigger","author":{"_account_id":1000002,"name":"jenkins","email":"jenkins@lttng.org","username":"jenkins","avatars":[{"url":"https://www.gravatar.com/avatar/e3f1da3d4191917309975c0380f40764.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/e3f1da3d4191917309975c0380f40764.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/e3f1da3d4191917309975c0380f40764.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/e3f1da3d4191917309975c0380f40764.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d120","height":120}],"tags":["SERVICE_USER"]},"date":"2025-09-23 18:43:43.000000000","message":"Patch Set 54:\n\nBuild Started https://ci.lttng.org/job/dev_review_binutils-gdb_master_linuxbuild_gcc/169/","accounts_in_message":[],"_revision_number":54},{"id":"ba56f1f86955cd2a859d2ed07fe26791686d6b75","tag":"autogenerated:jenkins-gerrit-trigger","author":{"_account_id":1000002,"name":"jenkins","email":"jenkins@lttng.org","username":"jenkins","avatars":[{"url":"https://www.gravatar.com/avatar/e3f1da3d4191917309975c0380f40764.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/e3f1da3d4191917309975c0380f40764.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/e3f1da3d4191917309975c0380f40764.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/e3f1da3d4191917309975c0380f40764.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d120","height":120}],"tags":["SERVICE_USER"]},"date":"2025-09-23 20:49:08.000000000","message":"Patch Set 54: Verified-2\n\nBuild Failed \n\nhttps://ci.lttng.org/job/dev_review_binutils-gdb_master_linuxbuild_gcc/169/ : FAILURE","accounts_in_message":[],"_revision_number":54},{"id":"7856922b95ad38107427eb9e754758e1736de826","author":{"_account_id":1000001,"name":"Simon Marchi","email":"simon.marchi@efficios.com","username":"simark","avatars":[{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d120","height":120}]},"date":"2025-09-25 19:33:00.000000000","message":"Patch Set 54:\n\n(1 comment)","accounts_in_message":[],"_revision_number":54},{"id":"295083fa113bd530f008cf26b1722e520cd7aab8","author":{"_account_id":1000090,"name":"Sébastien D","email":"sdarche@efficios.com","username":"Sebdar","avatars":[{"url":"https://www.gravatar.com/avatar/154d9c1bff6c233d2054afdc88226df9.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/154d9c1bff6c233d2054afdc88226df9.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/154d9c1bff6c233d2054afdc88226df9.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/154d9c1bff6c233d2054afdc88226df9.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d120","height":120}]},"date":"2025-09-29 13:46:53.000000000","message":"Patch Set 54:\n\n(1 comment)","accounts_in_message":[],"_revision_number":54},{"id":"30253baa2051a9c8cfa2f6585b64309c38bd822a","author":{"_account_id":1000090,"name":"Sébastien D","email":"sdarche@efficios.com","username":"Sebdar","avatars":[{"url":"https://www.gravatar.com/avatar/154d9c1bff6c233d2054afdc88226df9.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/154d9c1bff6c233d2054afdc88226df9.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/154d9c1bff6c233d2054afdc88226df9.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/154d9c1bff6c233d2054afdc88226df9.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d120","height":120}]},"date":"2025-09-29 14:40:46.000000000","message":"Patch Set 54:\n\n(1 comment)","accounts_in_message":[],"_revision_number":54},{"id":"bdf8b8aefd4ba74fe99967cbeb9018c923857088","tag":"autogenerated:gerrit:abandon","author":{"_account_id":1000090,"name":"Sébastien D","email":"sdarche@efficios.com","username":"Sebdar","avatars":[{"url":"https://www.gravatar.com/avatar/154d9c1bff6c233d2054afdc88226df9.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/154d9c1bff6c233d2054afdc88226df9.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/154d9c1bff6c233d2054afdc88226df9.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/154d9c1bff6c233d2054afdc88226df9.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d120","height":120}]},"date":"2025-10-03 14:21:22.000000000","message":"Abandoned","accounts_in_message":[],"_revision_number":54}],"current_revision_number":54,"current_revision":"92902a3ba1716c9bb1526cbb88adc63d1e7a54a4","revisions":{"b0cc661e40352dad9c5f1ca75017e96e318f8c8b":{"kind":"REWORK","_number":1,"created":"2021-05-12 17:14:15.000000000","uploader":{"_account_id":1000001,"name":"Simon Marchi","email":"simon.marchi@efficios.com","username":"simark","avatars":[{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d120","height":120}]},"ref":"refs/changes/31/5831/1","fetch":{"anonymous http":{"url":"https://review.lttng.org/binutils-gdb","ref":"refs/changes/31/5831/1","commands":{"Branch":"git fetch https://review.lttng.org/binutils-gdb refs/changes/31/5831/1 \u0026\u0026 git checkout -b change-5831 FETCH_HEAD","Checkout":"git fetch https://review.lttng.org/binutils-gdb refs/changes/31/5831/1 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://review.lttng.org/binutils-gdb refs/changes/31/5831/1 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://review.lttng.org/binutils-gdb refs/changes/31/5831/1 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://review.lttng.org/binutils-gdb refs/changes/31/5831/1","Reset To":"git fetch https://review.lttng.org/binutils-gdb refs/changes/31/5831/1 \u0026\u0026 git reset --hard FETCH_HEAD"}}},"commit":{"parents":[{"commit":"786ccca604acf0008eb894a4b75bdcb2a7335a69","subject":"gdb: remove cmd_list_element::pre_show_hook","web_links":[{"name":"gitweb","tooltip":"Open in GitWeb","url":"/gitweb?p\u003dbinutils-gdb.git;a\u003dcommit;h\u003d786ccca604acf0008eb894a4b75bdcb2a7335a69"}]}],"author":{"name":"Simon Marchi","email":"simon.marchi@polymtl.ca","date":"2021-05-12 15:22:03.000000000","tz":-240},"committer":{"name":"Simon Marchi","email":"simon.marchi@polymtl.ca","date":"2021-05-12 17:13:45.000000000","tz":-240},"subject":"gdb: fix getting per-inferior parameter through MI and Python","message":"gdb: fix getting per-inferior parameter through MI and Python\n\nChange-Id: I5529632c4f6505ec6cab696ab825aa2cb88567cf\n","web_links":[{"name":"gitweb","tooltip":"Open in GitWeb","url":"/gitweb?p\u003dbinutils-gdb.git;a\u003dcommit;h\u003db0cc661e40352dad9c5f1ca75017e96e318f8c8b"}],"resolve_conflicts_web_links":[{"name":"gitweb","tooltip":"Open in GitWeb","url":"/gitweb?p\u003dbinutils-gdb.git;a\u003dcommit;h\u003db0cc661e40352dad9c5f1ca75017e96e318f8c8b"}]},"branch":"refs/heads/master"},"4a0ea82c16df49522d2ed2a4f45009b9068c39d7":{"kind":"REWORK","_number":2,"created":"2021-05-18 18:25:27.000000000","uploader":{"_account_id":1000001,"name":"Simon Marchi","email":"simon.marchi@efficios.com","username":"simark","avatars":[{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d120","height":120}]},"ref":"refs/changes/31/5831/2","fetch":{"anonymous http":{"url":"https://review.lttng.org/binutils-gdb","ref":"refs/changes/31/5831/2","commands":{"Branch":"git fetch https://review.lttng.org/binutils-gdb refs/changes/31/5831/2 \u0026\u0026 git checkout -b change-5831 FETCH_HEAD","Checkout":"git fetch https://review.lttng.org/binutils-gdb refs/changes/31/5831/2 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://review.lttng.org/binutils-gdb refs/changes/31/5831/2 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://review.lttng.org/binutils-gdb refs/changes/31/5831/2 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://review.lttng.org/binutils-gdb refs/changes/31/5831/2","Reset To":"git fetch https://review.lttng.org/binutils-gdb refs/changes/31/5831/2 \u0026\u0026 git reset --hard FETCH_HEAD"}}},"commit":{"parents":[{"commit":"f27c50f26e5f2e4b7ab033e4a2dfc3565cdde3d6","subject":"gdb: un-share set_inferior_cwd declaration","web_links":[{"name":"gitweb","tooltip":"Open in GitWeb","url":"/gitweb?p\u003dbinutils-gdb.git;a\u003dcommit;h\u003df27c50f26e5f2e4b7ab033e4a2dfc3565cdde3d6"}]}],"author":{"name":"Simon Marchi","email":"simon.marchi@polymtl.ca","date":"2021-05-12 15:22:03.000000000","tz":-240},"committer":{"name":"Simon Marchi","email":"simon.marchi@polymtl.ca","date":"2021-05-18 18:19:45.000000000","tz":-240},"subject":"gdb: fix getting per-inferior parameter through MI and Python","message":"gdb: fix getting per-inferior parameter through MI and Python\n\nChange-Id: I5529632c4f6505ec6cab696ab825aa2cb88567cf\n","web_links":[{"name":"gitweb","tooltip":"Open in GitWeb","url":"/gitweb?p\u003dbinutils-gdb.git;a\u003dcommit;h\u003d4a0ea82c16df49522d2ed2a4f45009b9068c39d7"}],"resolve_conflicts_web_links":[{"name":"gitweb","tooltip":"Open in GitWeb","url":"/gitweb?p\u003dbinutils-gdb.git;a\u003dcommit;h\u003d4a0ea82c16df49522d2ed2a4f45009b9068c39d7"}]},"branch":"refs/heads/master"},"cb6b80d195e3907c5723cbcceb368b8f174ce750":{"kind":"TRIVIAL_REBASE","_number":3,"created":"2021-05-18 20:13:20.000000000","uploader":{"_account_id":1000001,"name":"Simon Marchi","email":"simon.marchi@efficios.com","username":"simark","avatars":[{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d120","height":120}]},"ref":"refs/changes/31/5831/3","fetch":{"anonymous http":{"url":"https://review.lttng.org/binutils-gdb","ref":"refs/changes/31/5831/3","commands":{"Branch":"git fetch https://review.lttng.org/binutils-gdb refs/changes/31/5831/3 \u0026\u0026 git checkout -b change-5831 FETCH_HEAD","Checkout":"git fetch https://review.lttng.org/binutils-gdb refs/changes/31/5831/3 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://review.lttng.org/binutils-gdb refs/changes/31/5831/3 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://review.lttng.org/binutils-gdb refs/changes/31/5831/3 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://review.lttng.org/binutils-gdb refs/changes/31/5831/3","Reset To":"git fetch https://review.lttng.org/binutils-gdb refs/changes/31/5831/3 \u0026\u0026 git reset --hard FETCH_HEAD"}}},"commit":{"parents":[{"commit":"91e04bab44fe4711a36e8e83d15e8ef8183da4ed","subject":"gdb: un-share set_inferior_cwd declaration","web_links":[{"name":"gitweb","tooltip":"Open in GitWeb","url":"/gitweb?p\u003dbinutils-gdb.git;a\u003dcommit;h\u003d91e04bab44fe4711a36e8e83d15e8ef8183da4ed"}]}],"author":{"name":"Simon Marchi","email":"simon.marchi@polymtl.ca","date":"2021-05-12 15:22:03.000000000","tz":-240},"committer":{"name":"Simon Marchi","email":"simon.marchi@polymtl.ca","date":"2021-05-18 20:13:04.000000000","tz":-240},"subject":"gdb: fix getting per-inferior parameter through MI and Python","message":"gdb: fix getting per-inferior parameter through MI and Python\n\nChange-Id: I5529632c4f6505ec6cab696ab825aa2cb88567cf\n","web_links":[{"name":"gitweb","tooltip":"Open in GitWeb","url":"/gitweb?p\u003dbinutils-gdb.git;a\u003dcommit;h\u003dcb6b80d195e3907c5723cbcceb368b8f174ce750"}],"resolve_conflicts_web_links":[{"name":"gitweb","tooltip":"Open in GitWeb","url":"/gitweb?p\u003dbinutils-gdb.git;a\u003dcommit;h\u003dcb6b80d195e3907c5723cbcceb368b8f174ce750"}]},"branch":"refs/heads/master"},"215f6b5da1b393c15866d70db7bbe6237aefcd20":{"kind":"REWORK","_number":4,"created":"2021-05-19 01:22:20.000000000","uploader":{"_account_id":1000001,"name":"Simon Marchi","email":"simon.marchi@efficios.com","username":"simark","avatars":[{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d120","height":120}]},"ref":"refs/changes/31/5831/4","fetch":{"anonymous http":{"url":"https://review.lttng.org/binutils-gdb","ref":"refs/changes/31/5831/4","commands":{"Branch":"git fetch https://review.lttng.org/binutils-gdb refs/changes/31/5831/4 \u0026\u0026 git checkout -b change-5831 FETCH_HEAD","Checkout":"git fetch https://review.lttng.org/binutils-gdb refs/changes/31/5831/4 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://review.lttng.org/binutils-gdb refs/changes/31/5831/4 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://review.lttng.org/binutils-gdb refs/changes/31/5831/4 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://review.lttng.org/binutils-gdb refs/changes/31/5831/4","Reset To":"git fetch https://review.lttng.org/binutils-gdb refs/changes/31/5831/4 \u0026\u0026 git reset --hard FETCH_HEAD"}}},"commit":{"parents":[{"commit":"d5ed24ccf9067e65423e23d2e0ff6ec3f576a9e1","subject":"gdb: un-share set_inferior_cwd declaration","web_links":[{"name":"gitweb","tooltip":"Open in GitWeb","url":"/gitweb?p\u003dbinutils-gdb.git;a\u003dcommit;h\u003dd5ed24ccf9067e65423e23d2e0ff6ec3f576a9e1"}]}],"author":{"name":"Simon Marchi","email":"simon.marchi@polymtl.ca","date":"2021-05-12 15:22:03.000000000","tz":-240},"committer":{"name":"Simon Marchi","email":"simon.marchi@polymtl.ca","date":"2021-05-19 01:22:10.000000000","tz":-240},"subject":"gdb: fix getting per-inferior parameter through MI and Python","message":"gdb: fix getting per-inferior parameter through MI and Python\n\nChange-Id: I5529632c4f6505ec6cab696ab825aa2cb88567cf\n","web_links":[{"name":"gitweb","tooltip":"Open in GitWeb","url":"/gitweb?p\u003dbinutils-gdb.git;a\u003dcommit;h\u003d215f6b5da1b393c15866d70db7bbe6237aefcd20"}],"resolve_conflicts_web_links":[{"name":"gitweb","tooltip":"Open in GitWeb","url":"/gitweb?p\u003dbinutils-gdb.git;a\u003dcommit;h\u003d215f6b5da1b393c15866d70db7bbe6237aefcd20"}]},"branch":"refs/heads/master"},"89f245e45ad45000f523aa2762f2e5327b1ad335":{"kind":"REWORK","_number":5,"created":"2021-05-19 16:04:53.000000000","uploader":{"_account_id":1000001,"name":"Simon Marchi","email":"simon.marchi@efficios.com","username":"simark","avatars":[{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d120","height":120}]},"ref":"refs/changes/31/5831/5","fetch":{"anonymous http":{"url":"https://review.lttng.org/binutils-gdb","ref":"refs/changes/31/5831/5","commands":{"Branch":"git fetch https://review.lttng.org/binutils-gdb refs/changes/31/5831/5 \u0026\u0026 git checkout -b change-5831 FETCH_HEAD","Checkout":"git fetch https://review.lttng.org/binutils-gdb refs/changes/31/5831/5 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://review.lttng.org/binutils-gdb refs/changes/31/5831/5 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://review.lttng.org/binutils-gdb refs/changes/31/5831/5 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://review.lttng.org/binutils-gdb refs/changes/31/5831/5","Reset To":"git fetch https://review.lttng.org/binutils-gdb refs/changes/31/5831/5 \u0026\u0026 git reset --hard FETCH_HEAD"}}},"commit":{"parents":[{"commit":"e13f61a5228c97fc3402e5c4530297fcdb7b39df","subject":"gdb: add setter/getter for inferior arguments","web_links":[{"name":"gitweb","tooltip":"Open in GitWeb","url":"/gitweb?p\u003dbinutils-gdb.git;a\u003dcommit;h\u003de13f61a5228c97fc3402e5c4530297fcdb7b39df"}]}],"author":{"name":"Simon Marchi","email":"simon.marchi@polymtl.ca","date":"2021-05-12 15:22:03.000000000","tz":-240},"committer":{"name":"Simon Marchi","email":"simon.marchi@polymtl.ca","date":"2021-05-19 16:04:44.000000000","tz":-240},"subject":"gdb: fix getting per-inferior parameter through MI and Python","message":"gdb: fix getting per-inferior parameter through MI and Python\n\nChange-Id: I5529632c4f6505ec6cab696ab825aa2cb88567cf\n","web_links":[{"name":"gitweb","tooltip":"Open in GitWeb","url":"/gitweb?p\u003dbinutils-gdb.git;a\u003dcommit;h\u003d89f245e45ad45000f523aa2762f2e5327b1ad335"}],"resolve_conflicts_web_links":[{"name":"gitweb","tooltip":"Open in GitWeb","url":"/gitweb?p\u003dbinutils-gdb.git;a\u003dcommit;h\u003d89f245e45ad45000f523aa2762f2e5327b1ad335"}]},"branch":"refs/heads/master"},"06b71111d2b14c0f1aa4f20c8c460748148306f8":{"kind":"TRIVIAL_REBASE","_number":6,"created":"2021-05-19 19:11:44.000000000","uploader":{"_account_id":1000001,"name":"Simon Marchi","email":"simon.marchi@efficios.com","username":"simark","avatars":[{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d120","height":120}]},"ref":"refs/changes/31/5831/6","fetch":{"anonymous http":{"url":"https://review.lttng.org/binutils-gdb","ref":"refs/changes/31/5831/6","commands":{"Branch":"git fetch https://review.lttng.org/binutils-gdb refs/changes/31/5831/6 \u0026\u0026 git checkout -b change-5831 FETCH_HEAD","Checkout":"git fetch https://review.lttng.org/binutils-gdb refs/changes/31/5831/6 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://review.lttng.org/binutils-gdb refs/changes/31/5831/6 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://review.lttng.org/binutils-gdb refs/changes/31/5831/6 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://review.lttng.org/binutils-gdb refs/changes/31/5831/6","Reset To":"git fetch https://review.lttng.org/binutils-gdb refs/changes/31/5831/6 \u0026\u0026 git reset --hard FETCH_HEAD"}}},"commit":{"parents":[{"commit":"e0948554a696a1e5eb88eea5bbc076507267ca31","subject":"gdb: add setter/getter for inferior arguments","web_links":[{"name":"gitweb","tooltip":"Open in GitWeb","url":"/gitweb?p\u003dbinutils-gdb.git;a\u003dcommit;h\u003de0948554a696a1e5eb88eea5bbc076507267ca31"}]}],"author":{"name":"Simon Marchi","email":"simon.marchi@polymtl.ca","date":"2021-05-12 15:22:03.000000000","tz":-240},"committer":{"name":"Simon Marchi","email":"simon.marchi@polymtl.ca","date":"2021-05-19 19:11:36.000000000","tz":-240},"subject":"gdb: fix getting per-inferior parameter through MI and Python","message":"gdb: fix getting per-inferior parameter through MI and Python\n\nChange-Id: I5529632c4f6505ec6cab696ab825aa2cb88567cf\n","web_links":[{"name":"gitweb","tooltip":"Open in GitWeb","url":"/gitweb?p\u003dbinutils-gdb.git;a\u003dcommit;h\u003d06b71111d2b14c0f1aa4f20c8c460748148306f8"}],"resolve_conflicts_web_links":[{"name":"gitweb","tooltip":"Open in GitWeb","url":"/gitweb?p\u003dbinutils-gdb.git;a\u003dcommit;h\u003d06b71111d2b14c0f1aa4f20c8c460748148306f8"}]},"branch":"refs/heads/master"},"fd030bcdba27a3216d35f7d57441d6b964d5243c":{"kind":"TRIVIAL_REBASE","_number":7,"created":"2021-06-25 17:56:19.000000000","uploader":{"_account_id":1000001,"name":"Simon Marchi","email":"simon.marchi@efficios.com","username":"simark","avatars":[{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d120","height":120}]},"ref":"refs/changes/31/5831/7","fetch":{"anonymous http":{"url":"https://review.lttng.org/binutils-gdb","ref":"refs/changes/31/5831/7","commands":{"Branch":"git fetch https://review.lttng.org/binutils-gdb refs/changes/31/5831/7 \u0026\u0026 git checkout -b change-5831 FETCH_HEAD","Checkout":"git fetch https://review.lttng.org/binutils-gdb refs/changes/31/5831/7 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://review.lttng.org/binutils-gdb refs/changes/31/5831/7 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://review.lttng.org/binutils-gdb refs/changes/31/5831/7 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://review.lttng.org/binutils-gdb refs/changes/31/5831/7","Reset To":"git fetch https://review.lttng.org/binutils-gdb refs/changes/31/5831/7 \u0026\u0026 git reset --hard FETCH_HEAD"}}},"commit":{"parents":[{"commit":"6b6be1770271631f5d38c12c3796196c24c1870d","subject":"gdb: add setter/getter for inferior arguments","web_links":[{"name":"gitweb","tooltip":"Open in GitWeb","url":"/gitweb?p\u003dbinutils-gdb.git;a\u003dcommit;h\u003d6b6be1770271631f5d38c12c3796196c24c1870d"}]}],"author":{"name":"Simon Marchi","email":"simon.marchi@polymtl.ca","date":"2021-05-12 15:22:03.000000000","tz":-240},"committer":{"name":"Simon Marchi","email":"simon.marchi@polymtl.ca","date":"2021-06-25 17:55:46.000000000","tz":-240},"subject":"gdb: fix getting per-inferior parameter through MI and Python","message":"gdb: fix getting per-inferior parameter through MI and Python\n\nChange-Id: I5529632c4f6505ec6cab696ab825aa2cb88567cf\n","web_links":[{"name":"gitweb","tooltip":"Open in GitWeb","url":"/gitweb?p\u003dbinutils-gdb.git;a\u003dcommit;h\u003dfd030bcdba27a3216d35f7d57441d6b964d5243c"}],"resolve_conflicts_web_links":[{"name":"gitweb","tooltip":"Open in GitWeb","url":"/gitweb?p\u003dbinutils-gdb.git;a\u003dcommit;h\u003dfd030bcdba27a3216d35f7d57441d6b964d5243c"}]},"branch":"refs/heads/master"},"90c1bd6724a72afe293da1f103a030904ae74c5e":{"kind":"TRIVIAL_REBASE","_number":8,"created":"2021-06-25 18:32:34.000000000","uploader":{"_account_id":1000001,"name":"Simon Marchi","email":"simon.marchi@efficios.com","username":"simark","avatars":[{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d120","height":120}]},"ref":"refs/changes/31/5831/8","fetch":{"anonymous http":{"url":"https://review.lttng.org/binutils-gdb","ref":"refs/changes/31/5831/8","commands":{"Branch":"git fetch https://review.lttng.org/binutils-gdb refs/changes/31/5831/8 \u0026\u0026 git checkout -b change-5831 FETCH_HEAD","Checkout":"git fetch https://review.lttng.org/binutils-gdb refs/changes/31/5831/8 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://review.lttng.org/binutils-gdb refs/changes/31/5831/8 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://review.lttng.org/binutils-gdb refs/changes/31/5831/8 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://review.lttng.org/binutils-gdb refs/changes/31/5831/8","Reset To":"git fetch https://review.lttng.org/binutils-gdb refs/changes/31/5831/8 \u0026\u0026 git reset --hard FETCH_HEAD"}}},"commit":{"parents":[{"commit":"b8bbd687c5596b1bc489745c57bc0b5feab95784","subject":"gdb: remove context parameter from add_setshow_enum_cmd","web_links":[{"name":"gitweb","tooltip":"Open in GitWeb","url":"/gitweb?p\u003dbinutils-gdb.git;a\u003dcommit;h\u003db8bbd687c5596b1bc489745c57bc0b5feab95784"}]}],"author":{"name":"Simon Marchi","email":"simon.marchi@polymtl.ca","date":"2021-05-12 15:22:03.000000000","tz":-240},"committer":{"name":"Simon Marchi","email":"simon.marchi@polymtl.ca","date":"2021-06-25 18:32:12.000000000","tz":-240},"subject":"gdb: fix getting per-inferior parameter through MI and Python","message":"gdb: fix getting per-inferior parameter through MI and Python\n\nChange-Id: I5529632c4f6505ec6cab696ab825aa2cb88567cf\n","web_links":[{"name":"gitweb","tooltip":"Open in GitWeb","url":"/gitweb?p\u003dbinutils-gdb.git;a\u003dcommit;h\u003d90c1bd6724a72afe293da1f103a030904ae74c5e"}],"resolve_conflicts_web_links":[{"name":"gitweb","tooltip":"Open in GitWeb","url":"/gitweb?p\u003dbinutils-gdb.git;a\u003dcommit;h\u003d90c1bd6724a72afe293da1f103a030904ae74c5e"}]},"branch":"refs/heads/master"},"2dd3114fd371a97c461a4f6d8943a099b7340579":{"kind":"TRIVIAL_REBASE","_number":9,"created":"2021-06-25 20:14:49.000000000","uploader":{"_account_id":1000001,"name":"Simon Marchi","email":"simon.marchi@efficios.com","username":"simark","avatars":[{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d120","height":120}]},"ref":"refs/changes/31/5831/9","fetch":{"anonymous http":{"url":"https://review.lttng.org/binutils-gdb","ref":"refs/changes/31/5831/9","commands":{"Branch":"git fetch https://review.lttng.org/binutils-gdb refs/changes/31/5831/9 \u0026\u0026 git checkout -b change-5831 FETCH_HEAD","Checkout":"git fetch https://review.lttng.org/binutils-gdb refs/changes/31/5831/9 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://review.lttng.org/binutils-gdb refs/changes/31/5831/9 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://review.lttng.org/binutils-gdb refs/changes/31/5831/9 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://review.lttng.org/binutils-gdb refs/changes/31/5831/9","Reset To":"git fetch https://review.lttng.org/binutils-gdb refs/changes/31/5831/9 \u0026\u0026 git reset --hard FETCH_HEAD"}}},"commit":{"parents":[{"commit":"db55e7f4dd4eecdf4f5a54ad094d7bdfb0c56f00","subject":"gdb: add setter/getter for inferior arguments","web_links":[{"name":"gitweb","tooltip":"Open in GitWeb","url":"/gitweb?p\u003dbinutils-gdb.git;a\u003dcommit;h\u003ddb55e7f4dd4eecdf4f5a54ad094d7bdfb0c56f00"}]}],"author":{"name":"Simon Marchi","email":"simon.marchi@polymtl.ca","date":"2021-05-12 15:22:03.000000000","tz":-240},"committer":{"name":"Simon Marchi","email":"simon.marchi@polymtl.ca","date":"2021-06-25 20:14:39.000000000","tz":-240},"subject":"gdb: fix getting per-inferior parameter through MI and Python","message":"gdb: fix getting per-inferior parameter through MI and Python\n\nChange-Id: I5529632c4f6505ec6cab696ab825aa2cb88567cf\n","web_links":[{"name":"gitweb","tooltip":"Open in GitWeb","url":"/gitweb?p\u003dbinutils-gdb.git;a\u003dcommit;h\u003d2dd3114fd371a97c461a4f6d8943a099b7340579"}],"resolve_conflicts_web_links":[{"name":"gitweb","tooltip":"Open in GitWeb","url":"/gitweb?p\u003dbinutils-gdb.git;a\u003dcommit;h\u003d2dd3114fd371a97c461a4f6d8943a099b7340579"}]},"branch":"refs/heads/master"},"0df907474c18f8350f904cd0da265704c10a408b":{"kind":"NO_CODE_CHANGE","_number":10,"created":"2021-06-25 20:38:14.000000000","uploader":{"_account_id":1000001,"name":"Simon Marchi","email":"simon.marchi@efficios.com","username":"simark","avatars":[{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d120","height":120}]},"ref":"refs/changes/31/5831/10","fetch":{"anonymous http":{"url":"https://review.lttng.org/binutils-gdb","ref":"refs/changes/31/5831/10","commands":{"Branch":"git fetch https://review.lttng.org/binutils-gdb refs/changes/31/5831/10 \u0026\u0026 git checkout -b change-5831 FETCH_HEAD","Checkout":"git fetch https://review.lttng.org/binutils-gdb refs/changes/31/5831/10 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://review.lttng.org/binutils-gdb refs/changes/31/5831/10 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://review.lttng.org/binutils-gdb refs/changes/31/5831/10 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://review.lttng.org/binutils-gdb refs/changes/31/5831/10","Reset To":"git fetch https://review.lttng.org/binutils-gdb refs/changes/31/5831/10 \u0026\u0026 git reset --hard FETCH_HEAD"}}},"commit":{"parents":[{"commit":"db55e7f4dd4eecdf4f5a54ad094d7bdfb0c56f00","subject":"gdb: add setter/getter for inferior arguments","web_links":[{"name":"gitweb","tooltip":"Open in GitWeb","url":"/gitweb?p\u003dbinutils-gdb.git;a\u003dcommit;h\u003ddb55e7f4dd4eecdf4f5a54ad094d7bdfb0c56f00"}]}],"author":{"name":"Simon Marchi","email":"simon.marchi@polymtl.ca","date":"2021-05-12 15:22:03.000000000","tz":-240},"committer":{"name":"Simon Marchi","email":"simon.marchi@polymtl.ca","date":"2021-06-25 20:24:25.000000000","tz":-240},"subject":"gdb: fix getting per-inferior parameter through MI and Python","message":"gdb: fix getting per-inferior parameter through MI and Python\n\nParameters that are per-inferior are not printed correctly when accessed\nthrough MI or Python.  For example, the `show inferior-tty` value\ndepends on the currently selected inferior:\n\n    (gdb)\n    add-inferior\n    \u0026\"add-inferior\\n\"\n    \u003dthread-group-added,id\u003d\"i2\"\n    ~\"[New inferior 2]\\n\"\n    ~\"Added inferior 2\\n\"\n    ^done\n    (gdb)\n    set inferior-tty /a\n    \u0026\"set inferior-tty /a\\n\"\n    \u003dcmd-param-changed,param\u003d\"inferior-tty\",value\u003d\"/a\"\n    ^done\n    (gdb)\n    inferior 2\n    \u0026\"inferior 2\\n\"\n    ~\"[Switching to inferior 2 [\u003cnull\u003e] (\u003cnoexec\u003e)]\\n\"\n    ^done\n    (gdb)\n    set inferior-tty /b\n    \u0026\"set inferior-tty /b\\n\"\n    \u003dcmd-param-changed,param\u003d\"inferior-tty\",value\u003d\"/b\"\n    ^done\n    (gdb)\n    -gdb-show inferior-tty\n    ^done,value\u003d\"/b\"\n    (gdb)\n    inferior 1\n    \u0026\"inferior 1\\n\"\n    ~\"[Switching to inferior 1 [\u003cnull\u003e] (\u003cnoexec\u003e)]\\n\"\n    ^done\n    (gdb)\n    -gdb-show inferior-tty\n    ^done,value\u003d\"/b\"\n\nThe last `-gdb-show` shows `/b` for inferior 1, we would expect `/a`.\n\n    (gdb) add-inferior\n    [New inferior 2]\n    Added inferior 2\n    (gdb) set inferior-tty /a\n    (gdb) inferior 2\n    [Switching to inferior 2 [\u003cnull\u003e] (\u003cnoexec\u003e)]\n    (gdb) set inferior-tty /b\n    (gdb) python print(gdb.parameter(\u0027inferior-tty\u0027))\n    /b\n    (gdb) inferior 1\n    [Switching to inferior 1 [\u003cnull\u003e] (\u003cnoexec\u003e)]\n    (gdb) python print(gdb.parameter(\u0027inferior-tty\u0027))\n    /b\n\nThe last `gdb.parameter` shows `/b` for inferior 1, we would expect\n`/a`.\n\nThe reason for this is the scratch variable used for the set command.\nParameters (the things conceptually created using add_setshow_*\nfunctions) contain a pointer to a global variable, which is where to\nstore the value when executing the `set` command of the parameter.\nPer-inferior parameters are implemented on top of regular global\nparameters, but in addition specify a \"set\" command that copies the\ncontent of the scratch variable to the current inferior\u0027s structure.\nThe global variable is therefore only used as a scratchpad.\n\nThe CLI show command of the parameter is made to read the value from the\ncurrent inferior\u0027s structure, so it shows the right value, based on the\ncurrent inferior.  MI\u0027s -gdb-show and Python\u0027s gdb.parameter, however,\ntry to be generic, and read the parameter through the global variable\npointer.  For per-inferior parameters, that variable contains the last\nvalue set, not the value for the current inferior.\n\nIn my opinion, this bug can happen because of the bad design of having\nthe scratch variable, it should not be there in the first place (I\npresume that at some point, all parameters were global, and this \"hack\"\nwas added on top of that to get what looked like per-inferior\nparameters).  Instead of a pointer to a global variable, these\nparameters should provide a getter callback that could be used to obtain\nthe value of the parameter, based on the current context.\n\nChange-Id: I5529632c4f6505ec6cab696ab825aa2cb88567cf\n","web_links":[{"name":"gitweb","tooltip":"Open in GitWeb","url":"/gitweb?p\u003dbinutils-gdb.git;a\u003dcommit;h\u003d0df907474c18f8350f904cd0da265704c10a408b"}],"resolve_conflicts_web_links":[{"name":"gitweb","tooltip":"Open in GitWeb","url":"/gitweb?p\u003dbinutils-gdb.git;a\u003dcommit;h\u003d0df907474c18f8350f904cd0da265704c10a408b"}]},"branch":"refs/heads/master"},"0f827e9092c1d6f6c5306b24bb41e889739088e9":{"kind":"REWORK","_number":11,"created":"2021-06-25 22:12:19.000000000","uploader":{"_account_id":1000001,"name":"Simon Marchi","email":"simon.marchi@efficios.com","username":"simark","avatars":[{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d120","height":120}]},"ref":"refs/changes/31/5831/11","fetch":{"anonymous http":{"url":"https://review.lttng.org/binutils-gdb","ref":"refs/changes/31/5831/11","commands":{"Branch":"git fetch https://review.lttng.org/binutils-gdb refs/changes/31/5831/11 \u0026\u0026 git checkout -b change-5831 FETCH_HEAD","Checkout":"git fetch https://review.lttng.org/binutils-gdb refs/changes/31/5831/11 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://review.lttng.org/binutils-gdb refs/changes/31/5831/11 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://review.lttng.org/binutils-gdb refs/changes/31/5831/11 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://review.lttng.org/binutils-gdb refs/changes/31/5831/11","Reset To":"git fetch https://review.lttng.org/binutils-gdb refs/changes/31/5831/11 \u0026\u0026 git reset --hard FETCH_HEAD"}}},"commit":{"parents":[{"commit":"61733993f6d2f6a9e3a8df37fda56ec80af0fdd0","subject":"make inferior cwd a string","web_links":[{"name":"gitweb","tooltip":"Open in GitWeb","url":"/gitweb?p\u003dbinutils-gdb.git;a\u003dcommit;h\u003d61733993f6d2f6a9e3a8df37fda56ec80af0fdd0"}]}],"author":{"name":"Simon Marchi","email":"simon.marchi@polymtl.ca","date":"2021-05-12 15:22:03.000000000","tz":-240},"committer":{"name":"Simon Marchi","email":"simon.marchi@polymtl.ca","date":"2021-06-25 22:10:57.000000000","tz":-240},"subject":"gdb: fix getting per-inferior parameter through MI and Python","message":"gdb: fix getting per-inferior parameter through MI and Python\n\nParameters that are per-inferior are not printed correctly when accessed\nthrough MI or Python.  For example, the `show inferior-tty` value\ndepends on the currently selected inferior:\n\n    (gdb)\n    add-inferior\n    \u0026\"add-inferior\\n\"\n    \u003dthread-group-added,id\u003d\"i2\"\n    ~\"[New inferior 2]\\n\"\n    ~\"Added inferior 2\\n\"\n    ^done\n    (gdb)\n    set inferior-tty /a\n    \u0026\"set inferior-tty /a\\n\"\n    \u003dcmd-param-changed,param\u003d\"inferior-tty\",value\u003d\"/a\"\n    ^done\n    (gdb)\n    inferior 2\n    \u0026\"inferior 2\\n\"\n    ~\"[Switching to inferior 2 [\u003cnull\u003e] (\u003cnoexec\u003e)]\\n\"\n    ^done\n    (gdb)\n    set inferior-tty /b\n    \u0026\"set inferior-tty /b\\n\"\n    \u003dcmd-param-changed,param\u003d\"inferior-tty\",value\u003d\"/b\"\n    ^done\n    (gdb)\n    -gdb-show inferior-tty\n    ^done,value\u003d\"/b\"\n    (gdb)\n    inferior 1\n    \u0026\"inferior 1\\n\"\n    ~\"[Switching to inferior 1 [\u003cnull\u003e] (\u003cnoexec\u003e)]\\n\"\n    ^done\n    (gdb)\n    -gdb-show inferior-tty\n    ^done,value\u003d\"/b\"\n\nThe last `-gdb-show` shows `/b` for inferior 1, we would expect `/a`.\n\n    (gdb) add-inferior\n    [New inferior 2]\n    Added inferior 2\n    (gdb) set inferior-tty /a\n    (gdb) inferior 2\n    [Switching to inferior 2 [\u003cnull\u003e] (\u003cnoexec\u003e)]\n    (gdb) set inferior-tty /b\n    (gdb) python print(gdb.parameter(\u0027inferior-tty\u0027))\n    /b\n    (gdb) inferior 1\n    [Switching to inferior 1 [\u003cnull\u003e] (\u003cnoexec\u003e)]\n    (gdb) python print(gdb.parameter(\u0027inferior-tty\u0027))\n    /b\n\nThe last `gdb.parameter` shows `/b` for inferior 1, we would expect\n`/a`.\n\nThe reason for this is the scratch variable used for the set command.\nParameters (the things conceptually created using add_setshow_*\nfunctions) contain a pointer to a global variable, which is where to\nstore the value when executing the `set` command of the parameter.\nPer-inferior parameters are implemented on top of regular global\nparameters, but in addition specify a \"set\" command that copies the\ncontent of the scratch variable to the current inferior\u0027s structure.\nThe global variable is therefore only used as a scratchpad.\n\nThe CLI show command of the parameter is made to read the value from the\ncurrent inferior\u0027s structure, so it shows the right value, based on the\ncurrent inferior.  MI\u0027s -gdb-show and Python\u0027s gdb.parameter, however,\ntry to be generic, and read the parameter through the global variable\npointer.  For per-inferior parameters, that variable contains the last\nvalue set, not the value for the current inferior.\n\nIn my opinion, this bug can happen because of the bad design of having\nthe scratch variable, it should not be there in the first place (I\npresume that at some point, all parameters were global, and this \"hack\"\nwas added on top of that to get what looked like per-inferior\nparameters).\n\nAdd some versions of some add_setshow functions that take\n\n - a get callback, instead of a pointer to a global variable.  This\n   getter returns the value of the parameter based on the current\n   context.\n - a set callback, which accepts the computed value as a parameter,\n   instead of having to get it from a global variable.\n - a show callback, which receives the value to show as a parameter.\n   The show callback could fetch the value itself (for example, from the\n   current inferior, in the case of inferior-tty), but since we already\n   have a dedicated get callback, I think it\u0027s better to keep the \"how\n   to get the value\" knowledge in a single place.  The core code gets\n   the value using the get callback and passes it to the show callback.\n\nNote that just like before, the show callback is only used for the CLI.\nPython and MI previously obtained the value by reading the global\nvariable.  For commands implemented using these new add_setshow\nfunctions, Python and MI now get the value using the get callback.\n\nConceptually, all this is to separate the \"get the value\" and \"show the\nvalue\" parts of show commands.\n\nThe get/set/show callbacks are stored in the cmd_list_element object.\nThe cmd_list_element::function::{show,set}_cmd fields are used when the\ncmd_list_element\u0027s type is {show,set}_cmd.  Because I want the callback\nfunctions to be adequately typed, based on the parameter type, the\nget/set/show callbacks are stored in unions.  For now, these new\nadd_setshow functions are only available for parameters that are\nstrings, so there are only callbacks that deal with strings.  If, in the\nfuture, we want to do the same for parameters that are integers, we will\nbe able to add additional members in get_func/show_func/set_func.\n\nChange-Id: I5529632c4f6505ec6cab696ab825aa2cb88567cf\n","web_links":[{"name":"gitweb","tooltip":"Open in GitWeb","url":"/gitweb?p\u003dbinutils-gdb.git;a\u003dcommit;h\u003d0f827e9092c1d6f6c5306b24bb41e889739088e9"}],"resolve_conflicts_web_links":[{"name":"gitweb","tooltip":"Open in GitWeb","url":"/gitweb?p\u003dbinutils-gdb.git;a\u003dcommit;h\u003d0f827e9092c1d6f6c5306b24bb41e889739088e9"}]},"branch":"refs/heads/master"},"10823e764e35664b03ed9305d4cf565fc1a570e4":{"kind":"REWORK","_number":12,"created":"2021-06-26 02:06:58.000000000","uploader":{"_account_id":1000001,"name":"Simon Marchi","email":"simon.marchi@efficios.com","username":"simark","avatars":[{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d120","height":120}]},"ref":"refs/changes/31/5831/12","fetch":{"anonymous http":{"url":"https://review.lttng.org/binutils-gdb","ref":"refs/changes/31/5831/12","commands":{"Branch":"git fetch https://review.lttng.org/binutils-gdb refs/changes/31/5831/12 \u0026\u0026 git checkout -b change-5831 FETCH_HEAD","Checkout":"git fetch https://review.lttng.org/binutils-gdb refs/changes/31/5831/12 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://review.lttng.org/binutils-gdb refs/changes/31/5831/12 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://review.lttng.org/binutils-gdb refs/changes/31/5831/12 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://review.lttng.org/binutils-gdb refs/changes/31/5831/12","Reset To":"git fetch https://review.lttng.org/binutils-gdb refs/changes/31/5831/12 \u0026\u0026 git reset --hard FETCH_HEAD"}}},"commit":{"parents":[{"commit":"57d2f90abc18dda185fa9dc4c437f8a42a0e9f72","subject":"make inferior cwd a string","web_links":[{"name":"gitweb","tooltip":"Open in GitWeb","url":"/gitweb?p\u003dbinutils-gdb.git;a\u003dcommit;h\u003d57d2f90abc18dda185fa9dc4c437f8a42a0e9f72"}]}],"author":{"name":"Simon Marchi","email":"simon.marchi@polymtl.ca","date":"2021-05-12 15:22:03.000000000","tz":-240},"committer":{"name":"Simon Marchi","email":"simon.marchi@polymtl.ca","date":"2021-06-26 02:06:52.000000000","tz":-240},"subject":"gdb: fix getting per-inferior parameter through MI and Python","message":"gdb: fix getting per-inferior parameter through MI and Python\n\nParameters that are per-inferior are not printed correctly when accessed\nthrough MI or Python.  For example, the `show inferior-tty` value\ndepends on the currently selected inferior:\n\n    (gdb)\n    add-inferior\n    \u0026\"add-inferior\\n\"\n    \u003dthread-group-added,id\u003d\"i2\"\n    ~\"[New inferior 2]\\n\"\n    ~\"Added inferior 2\\n\"\n    ^done\n    (gdb)\n    set inferior-tty /a\n    \u0026\"set inferior-tty /a\\n\"\n    \u003dcmd-param-changed,param\u003d\"inferior-tty\",value\u003d\"/a\"\n    ^done\n    (gdb)\n    inferior 2\n    \u0026\"inferior 2\\n\"\n    ~\"[Switching to inferior 2 [\u003cnull\u003e] (\u003cnoexec\u003e)]\\n\"\n    ^done\n    (gdb)\n    set inferior-tty /b\n    \u0026\"set inferior-tty /b\\n\"\n    \u003dcmd-param-changed,param\u003d\"inferior-tty\",value\u003d\"/b\"\n    ^done\n    (gdb)\n    -gdb-show inferior-tty\n    ^done,value\u003d\"/b\"\n    (gdb)\n    inferior 1\n    \u0026\"inferior 1\\n\"\n    ~\"[Switching to inferior 1 [\u003cnull\u003e] (\u003cnoexec\u003e)]\\n\"\n    ^done\n    (gdb)\n    -gdb-show inferior-tty\n    ^done,value\u003d\"/b\"\n\nThe last `-gdb-show` shows `/b` for inferior 1, we would expect `/a`.\n\n    (gdb) add-inferior\n    [New inferior 2]\n    Added inferior 2\n    (gdb) set inferior-tty /a\n    (gdb) inferior 2\n    [Switching to inferior 2 [\u003cnull\u003e] (\u003cnoexec\u003e)]\n    (gdb) set inferior-tty /b\n    (gdb) python print(gdb.parameter(\u0027inferior-tty\u0027))\n    /b\n    (gdb) inferior 1\n    [Switching to inferior 1 [\u003cnull\u003e] (\u003cnoexec\u003e)]\n    (gdb) python print(gdb.parameter(\u0027inferior-tty\u0027))\n    /b\n\nThe last `gdb.parameter` shows `/b` for inferior 1, we would expect\n`/a`.\n\nThe reason for this is the scratch variable used for the set command.\nParameters (the things conceptually created using add_setshow_*\nfunctions) contain a pointer to a global variable, which is where to\nstore the value when executing the `set` command of the parameter.\nPer-inferior parameters are implemented on top of regular global\nparameters, but in addition specify a \"set\" command that copies the\ncontent of the scratch variable to the current inferior\u0027s structure.\nThe global variable is therefore only used as a scratchpad.\n\nThe CLI show command of the parameter is made to read the value from the\ncurrent inferior\u0027s structure, so it shows the right value, based on the\ncurrent inferior.  MI\u0027s -gdb-show and Python\u0027s gdb.parameter, however,\ntry to be generic, and read the parameter through the global variable\npointer.  For per-inferior parameters, that variable contains the last\nvalue set, not the value for the current inferior.\n\nIn my opinion, this bug can happen because of the bad design of having\nthe scratch variable, it should not be there in the first place (I\npresume that at some point, all parameters were global, and this \"hack\"\nwas added on top of that to get what looked like per-inferior\nparameters).\n\nAdd some versions of some add_setshow functions that take\n\n - a get callback, instead of a pointer to a global variable.  This\n   getter returns the value of the parameter based on the current\n   context.\n - a set callback, which accepts the computed value as a parameter,\n   instead of having to get it from a global variable.\n - a show callback, which receives the value to show as a parameter.\n   The show callback could fetch the value itself (for example, from the\n   current inferior, in the case of inferior-tty), but since we already\n   have a dedicated get callback, I think it\u0027s better to keep the \"how\n   to get the value\" knowledge in a single place.  The core code gets\n   the value using the get callback and passes it to the show callback.\n\nNote that just like before, the show callback is only used for the CLI.\nPython and MI previously obtained the value by reading the global\nvariable.  For commands implemented using these new add_setshow\nfunctions, Python and MI now get the value using the get callback.\n\nConceptually, all this is to separate the \"get the value\" and \"show the\nvalue\" parts of show commands.\n\nThe get/set/show callbacks are stored in the cmd_list_element object.\nThe cmd_list_element::function::{show,set}_cmd fields are used when the\ncmd_list_element\u0027s type is {show,set}_cmd.  Because I want the callback\nfunctions to be adequately typed, based on the parameter type, the\nget/set/show callbacks are stored in unions.  For now, these new\nadd_setshow functions are only available for parameters that are\nstrings, so there are only callbacks that deal with strings.  If, in the\nfuture, we want to do the same for parameters that are integers, we will\nbe able to add additional members in get_func/show_func/set_func.\n\nChange-Id: I5529632c4f6505ec6cab696ab825aa2cb88567cf\n","web_links":[{"name":"gitweb","tooltip":"Open in GitWeb","url":"/gitweb?p\u003dbinutils-gdb.git;a\u003dcommit;h\u003d10823e764e35664b03ed9305d4cf565fc1a570e4"}],"resolve_conflicts_web_links":[{"name":"gitweb","tooltip":"Open in GitWeb","url":"/gitweb?p\u003dbinutils-gdb.git;a\u003dcommit;h\u003d10823e764e35664b03ed9305d4cf565fc1a570e4"}]},"branch":"refs/heads/master"},"cf88e7d21151bce1d94e9a843dad16fada1df57c":{"kind":"TRIVIAL_REBASE","_number":13,"created":"2021-06-28 19:34:39.000000000","uploader":{"_account_id":1000001,"name":"Simon Marchi","email":"simon.marchi@efficios.com","username":"simark","avatars":[{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d120","height":120}]},"ref":"refs/changes/31/5831/13","fetch":{"anonymous http":{"url":"https://review.lttng.org/binutils-gdb","ref":"refs/changes/31/5831/13","commands":{"Branch":"git fetch https://review.lttng.org/binutils-gdb refs/changes/31/5831/13 \u0026\u0026 git checkout -b change-5831 FETCH_HEAD","Checkout":"git fetch https://review.lttng.org/binutils-gdb refs/changes/31/5831/13 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://review.lttng.org/binutils-gdb refs/changes/31/5831/13 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://review.lttng.org/binutils-gdb refs/changes/31/5831/13 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://review.lttng.org/binutils-gdb refs/changes/31/5831/13","Reset To":"git fetch https://review.lttng.org/binutils-gdb refs/changes/31/5831/13 \u0026\u0026 git reset --hard FETCH_HEAD"}}},"commit":{"parents":[{"commit":"e877aea3b5c088c5aed8aa8c8cce49e51a9e6a06","subject":"make inferior cwd a string","web_links":[{"name":"gitweb","tooltip":"Open in GitWeb","url":"/gitweb?p\u003dbinutils-gdb.git;a\u003dcommit;h\u003de877aea3b5c088c5aed8aa8c8cce49e51a9e6a06"}]}],"author":{"name":"Simon Marchi","email":"simon.marchi@polymtl.ca","date":"2021-05-12 15:22:03.000000000","tz":-240},"committer":{"name":"Simon Marchi","email":"simon.marchi@polymtl.ca","date":"2021-06-28 19:34:35.000000000","tz":-240},"subject":"gdb: fix getting per-inferior parameter through MI and Python","message":"gdb: fix getting per-inferior parameter through MI and Python\n\nParameters that are per-inferior are not printed correctly when accessed\nthrough MI or Python.  For example, the `show inferior-tty` value\ndepends on the currently selected inferior:\n\n    (gdb)\n    add-inferior\n    \u0026\"add-inferior\\n\"\n    \u003dthread-group-added,id\u003d\"i2\"\n    ~\"[New inferior 2]\\n\"\n    ~\"Added inferior 2\\n\"\n    ^done\n    (gdb)\n    set inferior-tty /a\n    \u0026\"set inferior-tty /a\\n\"\n    \u003dcmd-param-changed,param\u003d\"inferior-tty\",value\u003d\"/a\"\n    ^done\n    (gdb)\n    inferior 2\n    \u0026\"inferior 2\\n\"\n    ~\"[Switching to inferior 2 [\u003cnull\u003e] (\u003cnoexec\u003e)]\\n\"\n    ^done\n    (gdb)\n    set inferior-tty /b\n    \u0026\"set inferior-tty /b\\n\"\n    \u003dcmd-param-changed,param\u003d\"inferior-tty\",value\u003d\"/b\"\n    ^done\n    (gdb)\n    -gdb-show inferior-tty\n    ^done,value\u003d\"/b\"\n    (gdb)\n    inferior 1\n    \u0026\"inferior 1\\n\"\n    ~\"[Switching to inferior 1 [\u003cnull\u003e] (\u003cnoexec\u003e)]\\n\"\n    ^done\n    (gdb)\n    -gdb-show inferior-tty\n    ^done,value\u003d\"/b\"\n\nThe last `-gdb-show` shows `/b` for inferior 1, we would expect `/a`.\n\n    (gdb) add-inferior\n    [New inferior 2]\n    Added inferior 2\n    (gdb) set inferior-tty /a\n    (gdb) inferior 2\n    [Switching to inferior 2 [\u003cnull\u003e] (\u003cnoexec\u003e)]\n    (gdb) set inferior-tty /b\n    (gdb) python print(gdb.parameter(\u0027inferior-tty\u0027))\n    /b\n    (gdb) inferior 1\n    [Switching to inferior 1 [\u003cnull\u003e] (\u003cnoexec\u003e)]\n    (gdb) python print(gdb.parameter(\u0027inferior-tty\u0027))\n    /b\n\nThe last `gdb.parameter` shows `/b` for inferior 1, we would expect\n`/a`.\n\nThe reason for this is the scratch variable used for the set command.\nParameters (the things conceptually created using add_setshow_*\nfunctions) contain a pointer to a global variable, which is where to\nstore the value when executing the `set` command of the parameter.\nPer-inferior parameters are implemented on top of regular global\nparameters, but in addition specify a \"set\" command that copies the\ncontent of the scratch variable to the current inferior\u0027s structure.\nThe global variable is therefore only used as a scratchpad.\n\nThe CLI show command of the parameter is made to read the value from the\ncurrent inferior\u0027s structure, so it shows the right value, based on the\ncurrent inferior.  MI\u0027s -gdb-show and Python\u0027s gdb.parameter, however,\ntry to be generic, and read the parameter through the global variable\npointer.  For per-inferior parameters, that variable contains the last\nvalue set, not the value for the current inferior.\n\nIn my opinion, this bug can happen because of the bad design of having\nthe scratch variable, it should not be there in the first place (I\npresume that at some point, all parameters were global, and this \"hack\"\nwas added on top of that to get what looked like per-inferior\nparameters).\n\nAdd some versions of some add_setshow functions that take\n\n - a get callback, instead of a pointer to a global variable.  This\n   getter returns the value of the parameter based on the current\n   context.\n - a set callback, which accepts the computed value as a parameter,\n   instead of having to get it from a global variable.\n - a show callback, which receives the value to show as a parameter.\n   The show callback could fetch the value itself (for example, from the\n   current inferior, in the case of inferior-tty), but since we already\n   have a dedicated get callback, I think it\u0027s better to keep the \"how\n   to get the value\" knowledge in a single place.  The core code gets\n   the value using the get callback and passes it to the show callback.\n\nNote that just like before, the show callback is only used for the CLI.\nPython and MI previously obtained the value by reading the global\nvariable.  For commands implemented using these new add_setshow\nfunctions, Python and MI now get the value using the get callback.\n\nConceptually, all this is to separate the \"get the value\" and \"show the\nvalue\" parts of show commands.\n\nThe get/set/show callbacks are stored in the cmd_list_element object.\nThe cmd_list_element::function::{show,set}_cmd fields are used when the\ncmd_list_element\u0027s type is {show,set}_cmd.  Because I want the callback\nfunctions to be adequately typed, based on the parameter type, the\nget/set/show callbacks are stored in unions.  For now, these new\nadd_setshow functions are only available for parameters that are\nstrings, so there are only callbacks that deal with strings.  If, in the\nfuture, we want to do the same for parameters that are integers, we will\nbe able to add additional members in get_func/show_func/set_func.\n\nChange-Id: I5529632c4f6505ec6cab696ab825aa2cb88567cf\n","web_links":[{"name":"gitweb","tooltip":"Open in GitWeb","url":"/gitweb?p\u003dbinutils-gdb.git;a\u003dcommit;h\u003dcf88e7d21151bce1d94e9a843dad16fada1df57c"}],"resolve_conflicts_web_links":[{"name":"gitweb","tooltip":"Open in GitWeb","url":"/gitweb?p\u003dbinutils-gdb.git;a\u003dcommit;h\u003dcf88e7d21151bce1d94e9a843dad16fada1df57c"}]},"branch":"refs/heads/master"},"e5ac02d7f75e649a6e3ae7a1be6f0e8bf77eba27":{"kind":"REWORK","_number":14,"created":"2021-06-29 14:54:09.000000000","uploader":{"_account_id":1000001,"name":"Simon Marchi","email":"simon.marchi@efficios.com","username":"simark","avatars":[{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d120","height":120}]},"ref":"refs/changes/31/5831/14","fetch":{"anonymous http":{"url":"https://review.lttng.org/binutils-gdb","ref":"refs/changes/31/5831/14","commands":{"Branch":"git fetch https://review.lttng.org/binutils-gdb refs/changes/31/5831/14 \u0026\u0026 git checkout -b change-5831 FETCH_HEAD","Checkout":"git fetch https://review.lttng.org/binutils-gdb refs/changes/31/5831/14 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://review.lttng.org/binutils-gdb refs/changes/31/5831/14 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://review.lttng.org/binutils-gdb refs/changes/31/5831/14 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://review.lttng.org/binutils-gdb refs/changes/31/5831/14","Reset To":"git fetch https://review.lttng.org/binutils-gdb refs/changes/31/5831/14 \u0026\u0026 git reset --hard FETCH_HEAD"}}},"commit":{"parents":[{"commit":"61b039306a0564484283b3fc07a30ae82a2ddcbf","subject":"gdb: make inferior::m_terminal an std::string","web_links":[{"name":"gitweb","tooltip":"Open in GitWeb","url":"/gitweb?p\u003dbinutils-gdb.git;a\u003dcommit;h\u003d61b039306a0564484283b3fc07a30ae82a2ddcbf"}]}],"author":{"name":"Simon Marchi","email":"simon.marchi@polymtl.ca","date":"2021-05-12 15:22:03.000000000","tz":-240},"committer":{"name":"Simon Marchi","email":"simon.marchi@polymtl.ca","date":"2021-06-29 14:54:02.000000000","tz":-240},"subject":"gdb: fix getting per-inferior parameter through MI and Python","message":"gdb: fix getting per-inferior parameter through MI and Python\n\nParameters that are per-inferior are not printed correctly when accessed\nthrough MI or Python.  For example, the `show inferior-tty` value\ndepends on the currently selected inferior:\n\n    (gdb)\n    add-inferior\n    \u0026\"add-inferior\\n\"\n    \u003dthread-group-added,id\u003d\"i2\"\n    ~\"[New inferior 2]\\n\"\n    ~\"Added inferior 2\\n\"\n    ^done\n    (gdb)\n    set inferior-tty /a\n    \u0026\"set inferior-tty /a\\n\"\n    \u003dcmd-param-changed,param\u003d\"inferior-tty\",value\u003d\"/a\"\n    ^done\n    (gdb)\n    inferior 2\n    \u0026\"inferior 2\\n\"\n    ~\"[Switching to inferior 2 [\u003cnull\u003e] (\u003cnoexec\u003e)]\\n\"\n    ^done\n    (gdb)\n    set inferior-tty /b\n    \u0026\"set inferior-tty /b\\n\"\n    \u003dcmd-param-changed,param\u003d\"inferior-tty\",value\u003d\"/b\"\n    ^done\n    (gdb)\n    -gdb-show inferior-tty\n    ^done,value\u003d\"/b\"\n    (gdb)\n    inferior 1\n    \u0026\"inferior 1\\n\"\n    ~\"[Switching to inferior 1 [\u003cnull\u003e] (\u003cnoexec\u003e)]\\n\"\n    ^done\n    (gdb)\n    -gdb-show inferior-tty\n    ^done,value\u003d\"/b\"\n\nThe last `-gdb-show` shows `/b` for inferior 1, we would expect `/a`.\n\n    (gdb) add-inferior\n    [New inferior 2]\n    Added inferior 2\n    (gdb) set inferior-tty /a\n    (gdb) inferior 2\n    [Switching to inferior 2 [\u003cnull\u003e] (\u003cnoexec\u003e)]\n    (gdb) set inferior-tty /b\n    (gdb) python print(gdb.parameter(\u0027inferior-tty\u0027))\n    /b\n    (gdb) inferior 1\n    [Switching to inferior 1 [\u003cnull\u003e] (\u003cnoexec\u003e)]\n    (gdb) python print(gdb.parameter(\u0027inferior-tty\u0027))\n    /b\n\nThe last `gdb.parameter` shows `/b` for inferior 1, we would expect\n`/a`.\n\nThe reason for this is the scratch variable used for the set command.\nParameters (the things conceptually created using add_setshow_*\nfunctions) contain a pointer to a global variable, which is where to\nstore the value when executing the `set` command of the parameter.\nPer-inferior parameters are implemented on top of regular global\nparameters, but in addition specify a \"set\" command that copies the\ncontent of the scratch variable to the current inferior\u0027s structure.\nThe global variable is therefore only used as a scratchpad.\n\nThe CLI show command of the parameter is made to read the value from the\ncurrent inferior\u0027s structure, so it shows the right value, based on the\ncurrent inferior.  MI\u0027s -gdb-show and Python\u0027s gdb.parameter, however,\ntry to be generic, and read the parameter through the global variable\npointer.  For per-inferior parameters, that variable contains the last\nvalue set, not the value for the current inferior.\n\nIn my opinion, this bug can happen because of the bad design of having\nthe scratch variable, it should not be there in the first place (I\npresume that at some point, all parameters were global, and this \"hack\"\nwas added on top of that to get what looked like per-inferior\nparameters).\n\nAdd some versions of some add_setshow functions that take\n\n - a get callback, instead of a pointer to a global variable.  This\n   getter returns the value of the parameter based on the current\n   context.\n - a set callback, which accepts the computed value as a parameter,\n   instead of having to get it from a global variable.\n - a show callback, which receives the value to show as a parameter.\n   The show callback could fetch the value itself (for example, from the\n   current inferior, in the case of inferior-tty), but since we already\n   have a dedicated get callback, I think it\u0027s better to keep the \"how\n   to get the value\" knowledge in a single place.  The core code gets\n   the value using the get callback and passes it to the show callback.\n\nNote that just like before, the show callback is only used for the CLI.\nPython and MI previously obtained the value by reading the global\nvariable.  For commands implemented using these new add_setshow\nfunctions, Python and MI now get the value using the get callback.\n\nConceptually, all this is to separate the \"get the value\" and \"show the\nvalue\" parts of show commands.\n\nThe get/set/show callbacks are stored in the cmd_list_element object.\nThe cmd_list_element::function::{show,set}_cmd fields are used when the\ncmd_list_element\u0027s type is {show,set}_cmd.  Because I want the callback\nfunctions to be adequately typed, based on the parameter type, the\nget/set/show callbacks are stored in unions.  For now, these new\nadd_setshow functions are only available for parameters that are\nstrings, so there are only callbacks that deal with strings.  If, in the\nfuture, we want to do the same for parameters that are integers, we will\nbe able to add additional members in get_func/show_func/set_func.\n\nChange-Id: I5529632c4f6505ec6cab696ab825aa2cb88567cf\n","web_links":[{"name":"gitweb","tooltip":"Open in GitWeb","url":"/gitweb?p\u003dbinutils-gdb.git;a\u003dcommit;h\u003de5ac02d7f75e649a6e3ae7a1be6f0e8bf77eba27"}],"resolve_conflicts_web_links":[{"name":"gitweb","tooltip":"Open in GitWeb","url":"/gitweb?p\u003dbinutils-gdb.git;a\u003dcommit;h\u003de5ac02d7f75e649a6e3ae7a1be6f0e8bf77eba27"}]},"branch":"refs/heads/master"},"e91118387649f6db5fd30edddf30b94e65adbfa0":{"kind":"REWORK","_number":15,"created":"2021-06-29 18:07:15.000000000","uploader":{"_account_id":1000001,"name":"Simon Marchi","email":"simon.marchi@efficios.com","username":"simark","avatars":[{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d120","height":120}]},"ref":"refs/changes/31/5831/15","fetch":{"anonymous http":{"url":"https://review.lttng.org/binutils-gdb","ref":"refs/changes/31/5831/15","commands":{"Branch":"git fetch https://review.lttng.org/binutils-gdb refs/changes/31/5831/15 \u0026\u0026 git checkout -b change-5831 FETCH_HEAD","Checkout":"git fetch https://review.lttng.org/binutils-gdb refs/changes/31/5831/15 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://review.lttng.org/binutils-gdb refs/changes/31/5831/15 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://review.lttng.org/binutils-gdb refs/changes/31/5831/15 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://review.lttng.org/binutils-gdb refs/changes/31/5831/15","Reset To":"git fetch https://review.lttng.org/binutils-gdb refs/changes/31/5831/15 \u0026\u0026 git reset --hard FETCH_HEAD"}}},"commit":{"parents":[{"commit":"d9311e8fb50206bc97db0ec81ae7009213e430ed","subject":"make inferior cwd a string","web_links":[{"name":"gitweb","tooltip":"Open in GitWeb","url":"/gitweb?p\u003dbinutils-gdb.git;a\u003dcommit;h\u003dd9311e8fb50206bc97db0ec81ae7009213e430ed"}]}],"author":{"name":"Simon Marchi","email":"simon.marchi@polymtl.ca","date":"2021-05-12 15:22:03.000000000","tz":-240},"committer":{"name":"Simon Marchi","email":"simon.marchi@polymtl.ca","date":"2021-06-29 18:07:08.000000000","tz":-240},"subject":"gdb: fix getting per-inferior parameter through MI and Python","message":"gdb: fix getting per-inferior parameter through MI and Python\n\nParameters that are per-inferior are not printed correctly when accessed\nthrough MI or Python.  For example, the `show inferior-tty` value\ndepends on the currently selected inferior:\n\n    (gdb)\n    add-inferior\n    \u0026\"add-inferior\\n\"\n    \u003dthread-group-added,id\u003d\"i2\"\n    ~\"[New inferior 2]\\n\"\n    ~\"Added inferior 2\\n\"\n    ^done\n    (gdb)\n    set inferior-tty /a\n    \u0026\"set inferior-tty /a\\n\"\n    \u003dcmd-param-changed,param\u003d\"inferior-tty\",value\u003d\"/a\"\n    ^done\n    (gdb)\n    inferior 2\n    \u0026\"inferior 2\\n\"\n    ~\"[Switching to inferior 2 [\u003cnull\u003e] (\u003cnoexec\u003e)]\\n\"\n    ^done\n    (gdb)\n    set inferior-tty /b\n    \u0026\"set inferior-tty /b\\n\"\n    \u003dcmd-param-changed,param\u003d\"inferior-tty\",value\u003d\"/b\"\n    ^done\n    (gdb)\n    -gdb-show inferior-tty\n    ^done,value\u003d\"/b\"\n    (gdb)\n    inferior 1\n    \u0026\"inferior 1\\n\"\n    ~\"[Switching to inferior 1 [\u003cnull\u003e] (\u003cnoexec\u003e)]\\n\"\n    ^done\n    (gdb)\n    -gdb-show inferior-tty\n    ^done,value\u003d\"/b\"\n\nThe last `-gdb-show` shows `/b` for inferior 1, we would expect `/a`.\n\n    (gdb) add-inferior\n    [New inferior 2]\n    Added inferior 2\n    (gdb) set inferior-tty /a\n    (gdb) inferior 2\n    [Switching to inferior 2 [\u003cnull\u003e] (\u003cnoexec\u003e)]\n    (gdb) set inferior-tty /b\n    (gdb) python print(gdb.parameter(\u0027inferior-tty\u0027))\n    /b\n    (gdb) inferior 1\n    [Switching to inferior 1 [\u003cnull\u003e] (\u003cnoexec\u003e)]\n    (gdb) python print(gdb.parameter(\u0027inferior-tty\u0027))\n    /b\n\nThe last `gdb.parameter` shows `/b` for inferior 1, we would expect\n`/a`.\n\nThe reason for this is the scratch variable used for the set command.\nParameters (the things conceptually created using add_setshow_*\nfunctions) contain a pointer to a global variable, which is where to\nstore the value when executing the `set` command of the parameter.\nPer-inferior parameters are implemented on top of regular global\nparameters, but in addition specify a \"set\" command that copies the\ncontent of the scratch variable to the current inferior\u0027s structure.\nThe global variable is therefore only used as a scratchpad.\n\nThe CLI show command of the parameter is made to read the value from the\ncurrent inferior\u0027s structure, so it shows the right value, based on the\ncurrent inferior.  MI\u0027s -gdb-show and Python\u0027s gdb.parameter, however,\ntry to be generic, and read the parameter through the global variable\npointer.  For per-inferior parameters, that variable contains the last\nvalue set, not the value for the current inferior.\n\nIn my opinion, this bug can happen because of the bad design of having\nthe scratch variable, it should not be there in the first place (I\npresume that at some point, all parameters were global, and this \"hack\"\nwas added on top of that to get what looked like per-inferior\nparameters).\n\nAdd some versions of some add_setshow functions that take\n\n - a get callback, instead of a pointer to a global variable.  This\n   getter returns the value of the parameter based on the current\n   context.\n - a set callback, which accepts the computed value as a parameter,\n   instead of having to get it from a global variable.\n - a show callback, which receives the value to show as a parameter.\n   The show callback could fetch the value itself (for example, from the\n   current inferior, in the case of inferior-tty), but since we already\n   have a dedicated get callback, I think it\u0027s better to keep the \"how\n   to get the value\" knowledge in a single place.  The core code gets\n   the value using the get callback and passes it to the show callback.\n\nNote that just like before, the show callback is only used for the CLI.\nPython and MI previously obtained the value by reading the global\nvariable.  For commands implemented using these new add_setshow\nfunctions, Python and MI now get the value using the get callback.\n\nConceptually, all this is to separate the \"get the value\" and \"show the\nvalue\" parts of show commands.\n\nThe get/set/show callbacks are stored in the cmd_list_element object.\nThe cmd_list_element::function::{show,set}_cmd fields are used when the\ncmd_list_element\u0027s type is {show,set}_cmd.  Because I want the callback\nfunctions to be adequately typed, based on the parameter type, the\nget/set/show callbacks are stored in unions.  For now, these new\nadd_setshow functions are only available for parameters that are\nstrings, so there are only callbacks that deal with strings.  If, in the\nfuture, we want to do the same for parameters that are integers, we will\nbe able to add additional members in get_func/show_func/set_func.\n\nChange-Id: I5529632c4f6505ec6cab696ab825aa2cb88567cf\n","web_links":[{"name":"gitweb","tooltip":"Open in GitWeb","url":"/gitweb?p\u003dbinutils-gdb.git;a\u003dcommit;h\u003de91118387649f6db5fd30edddf30b94e65adbfa0"}],"resolve_conflicts_web_links":[{"name":"gitweb","tooltip":"Open in GitWeb","url":"/gitweb?p\u003dbinutils-gdb.git;a\u003dcommit;h\u003de91118387649f6db5fd30edddf30b94e65adbfa0"}]},"branch":"refs/heads/master"},"015bdb1b0f5993b9644180c26725593604842d7b":{"kind":"REWORK","_number":16,"created":"2021-06-29 18:58:28.000000000","uploader":{"_account_id":1000001,"name":"Simon Marchi","email":"simon.marchi@efficios.com","username":"simark","avatars":[{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d120","height":120}]},"ref":"refs/changes/31/5831/16","fetch":{"anonymous http":{"url":"https://review.lttng.org/binutils-gdb","ref":"refs/changes/31/5831/16","commands":{"Branch":"git fetch https://review.lttng.org/binutils-gdb refs/changes/31/5831/16 \u0026\u0026 git checkout -b change-5831 FETCH_HEAD","Checkout":"git fetch https://review.lttng.org/binutils-gdb refs/changes/31/5831/16 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://review.lttng.org/binutils-gdb refs/changes/31/5831/16 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://review.lttng.org/binutils-gdb refs/changes/31/5831/16 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://review.lttng.org/binutils-gdb refs/changes/31/5831/16","Reset To":"git fetch https://review.lttng.org/binutils-gdb refs/changes/31/5831/16 \u0026\u0026 git reset --hard FETCH_HEAD"}}},"commit":{"parents":[{"commit":"82d1fe6bff9ffd6f1fa42e94e583f77d6b3c5012","subject":"gdb: make inferior::m_terminal an std::string","web_links":[{"name":"gitweb","tooltip":"Open in GitWeb","url":"/gitweb?p\u003dbinutils-gdb.git;a\u003dcommit;h\u003d82d1fe6bff9ffd6f1fa42e94e583f77d6b3c5012"}]}],"author":{"name":"Simon Marchi","email":"simon.marchi@polymtl.ca","date":"2021-05-12 15:22:03.000000000","tz":-240},"committer":{"name":"Simon Marchi","email":"simon.marchi@polymtl.ca","date":"2021-06-29 18:48:43.000000000","tz":-240},"subject":"gdb: fix getting per-inferior parameter through MI and Python","message":"gdb: fix getting per-inferior parameter through MI and Python\n\nParameters that are per-inferior are not printed correctly when accessed\nthrough MI or Python.  For example, the `show inferior-tty` value\ndepends on the currently selected inferior:\n\n    (gdb)\n    add-inferior\n    \u0026\"add-inferior\\n\"\n    \u003dthread-group-added,id\u003d\"i2\"\n    ~\"[New inferior 2]\\n\"\n    ~\"Added inferior 2\\n\"\n    ^done\n    (gdb)\n    set inferior-tty /a\n    \u0026\"set inferior-tty /a\\n\"\n    \u003dcmd-param-changed,param\u003d\"inferior-tty\",value\u003d\"/a\"\n    ^done\n    (gdb)\n    inferior 2\n    \u0026\"inferior 2\\n\"\n    ~\"[Switching to inferior 2 [\u003cnull\u003e] (\u003cnoexec\u003e)]\\n\"\n    ^done\n    (gdb)\n    set inferior-tty /b\n    \u0026\"set inferior-tty /b\\n\"\n    \u003dcmd-param-changed,param\u003d\"inferior-tty\",value\u003d\"/b\"\n    ^done\n    (gdb)\n    -gdb-show inferior-tty\n    ^done,value\u003d\"/b\"\n    (gdb)\n    inferior 1\n    \u0026\"inferior 1\\n\"\n    ~\"[Switching to inferior 1 [\u003cnull\u003e] (\u003cnoexec\u003e)]\\n\"\n    ^done\n    (gdb)\n    -gdb-show inferior-tty\n    ^done,value\u003d\"/b\"\n\nThe last `-gdb-show` shows `/b` for inferior 1, we would expect `/a`.\n\n    (gdb) add-inferior\n    [New inferior 2]\n    Added inferior 2\n    (gdb) set inferior-tty /a\n    (gdb) inferior 2\n    [Switching to inferior 2 [\u003cnull\u003e] (\u003cnoexec\u003e)]\n    (gdb) set inferior-tty /b\n    (gdb) python print(gdb.parameter(\u0027inferior-tty\u0027))\n    /b\n    (gdb) inferior 1\n    [Switching to inferior 1 [\u003cnull\u003e] (\u003cnoexec\u003e)]\n    (gdb) python print(gdb.parameter(\u0027inferior-tty\u0027))\n    /b\n\nThe last `gdb.parameter` shows `/b` for inferior 1, we would expect\n`/a`.\n\nThe reason for this is the scratch variable used for the set command.\nParameters (the things conceptually created using add_setshow_*\nfunctions) contain a pointer to a global variable, which is where to\nstore the value when executing the `set` command of the parameter.\nPer-inferior parameters are implemented on top of regular global\nparameters, but in addition specify a \"set\" command that copies the\ncontent of the scratch variable to the current inferior\u0027s structure.\nThe global variable is therefore only used as a scratchpad.\n\nThe CLI show command of the parameter is made to read the value from the\ncurrent inferior\u0027s structure, so it shows the right value, based on the\ncurrent inferior.  MI\u0027s -gdb-show and Python\u0027s gdb.parameter, however,\ntry to be generic, and read the parameter through the global variable\npointer.  For per-inferior parameters, that variable contains the last\nvalue set, not the value for the current inferior.\n\nIn my opinion, this bug can happen because of the bad design of having\nthe scratch variable, it should not be there in the first place (I\npresume that at some point, all parameters were global, and this \"hack\"\nwas added on top of that to get what looked like per-inferior\nparameters).\n\nAdd some versions of some add_setshow functions that take\n\n - a get callback, instead of a pointer to a global variable.  This\n   getter returns the value of the parameter based on the current\n   context.\n - a set callback, which accepts the computed value as a parameter,\n   instead of having to get it from a global variable.\n - a show callback, which receives the value to show as a parameter.\n   The show callback could fetch the value itself (for example, from the\n   current inferior, in the case of inferior-tty), but since we already\n   have a dedicated get callback, I think it\u0027s better to keep the \"how\n   to get the value\" knowledge in a single place.  The core code gets\n   the value using the get callback and passes it to the show callback.\n\nNote that just like before, the show callback is only used for the CLI.\nPython and MI previously obtained the value by reading the global\nvariable.  For commands implemented using these new add_setshow\nfunctions, Python and MI now get the value using the get callback.\n\nConceptually, all this is to separate the \"get the value\" and \"show the\nvalue\" parts of show commands.\n\nThe get/set/show callbacks are stored in the cmd_list_element object.\nThe cmd_list_element::function::{show,set}_cmd fields are used when the\ncmd_list_element\u0027s type is {show,set}_cmd.  Because I want the callback\nfunctions to be adequately typed, based on the parameter type, the\nget/set/show callbacks are stored in unions.  For now, these new\nadd_setshow functions are only available for parameters that are\nstrings, so there are only callbacks that deal with strings.  If, in the\nfuture, we want to do the same for parameters that are integers, we will\nbe able to add additional members in get_func/show_func/set_func.\n\nChange-Id: I5529632c4f6505ec6cab696ab825aa2cb88567cf\n","web_links":[{"name":"gitweb","tooltip":"Open in GitWeb","url":"/gitweb?p\u003dbinutils-gdb.git;a\u003dcommit;h\u003d015bdb1b0f5993b9644180c26725593604842d7b"}],"resolve_conflicts_web_links":[{"name":"gitweb","tooltip":"Open in GitWeb","url":"/gitweb?p\u003dbinutils-gdb.git;a\u003dcommit;h\u003d015bdb1b0f5993b9644180c26725593604842d7b"}]},"branch":"refs/heads/master"},"b3c34411e99302aa8249d31f267e6da8d87d2d77":{"kind":"REWORK","_number":17,"created":"2021-06-30 03:49:55.000000000","uploader":{"_account_id":1000001,"name":"Simon Marchi","email":"simon.marchi@efficios.com","username":"simark","avatars":[{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d120","height":120}]},"ref":"refs/changes/31/5831/17","fetch":{"anonymous http":{"url":"https://review.lttng.org/binutils-gdb","ref":"refs/changes/31/5831/17","commands":{"Branch":"git fetch https://review.lttng.org/binutils-gdb refs/changes/31/5831/17 \u0026\u0026 git checkout -b change-5831 FETCH_HEAD","Checkout":"git fetch https://review.lttng.org/binutils-gdb refs/changes/31/5831/17 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://review.lttng.org/binutils-gdb refs/changes/31/5831/17 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://review.lttng.org/binutils-gdb refs/changes/31/5831/17 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://review.lttng.org/binutils-gdb refs/changes/31/5831/17","Reset To":"git fetch https://review.lttng.org/binutils-gdb refs/changes/31/5831/17 \u0026\u0026 git reset --hard FETCH_HEAD"}}},"commit":{"parents":[{"commit":"bc0d2a962145f36eed3a198704a36a3fdee55207","subject":"gdb: remove sfunc","web_links":[{"name":"gitweb","tooltip":"Open in GitWeb","url":"/gitweb?p\u003dbinutils-gdb.git;a\u003dcommit;h\u003dbc0d2a962145f36eed3a198704a36a3fdee55207"}]}],"author":{"name":"Simon Marchi","email":"simon.marchi@polymtl.ca","date":"2021-05-12 15:22:03.000000000","tz":-240},"committer":{"name":"Simon Marchi","email":"simon.marchi@polymtl.ca","date":"2021-06-30 03:49:46.000000000","tz":-240},"subject":"gdb: fix getting per-inferior parameter through MI and Python","message":"gdb: fix getting per-inferior parameter through MI and Python\n\nParameters that are per-inferior are not printed correctly when accessed\nthrough MI or Python.  For example, the `show inferior-tty` value\ndepends on the currently selected inferior:\n\n    (gdb)\n    add-inferior\n    \u0026\"add-inferior\\n\"\n    \u003dthread-group-added,id\u003d\"i2\"\n    ~\"[New inferior 2]\\n\"\n    ~\"Added inferior 2\\n\"\n    ^done\n    (gdb)\n    set inferior-tty /a\n    \u0026\"set inferior-tty /a\\n\"\n    \u003dcmd-param-changed,param\u003d\"inferior-tty\",value\u003d\"/a\"\n    ^done\n    (gdb)\n    inferior 2\n    \u0026\"inferior 2\\n\"\n    ~\"[Switching to inferior 2 [\u003cnull\u003e] (\u003cnoexec\u003e)]\\n\"\n    ^done\n    (gdb)\n    set inferior-tty /b\n    \u0026\"set inferior-tty /b\\n\"\n    \u003dcmd-param-changed,param\u003d\"inferior-tty\",value\u003d\"/b\"\n    ^done\n    (gdb)\n    -gdb-show inferior-tty\n    ^done,value\u003d\"/b\"\n    (gdb)\n    inferior 1\n    \u0026\"inferior 1\\n\"\n    ~\"[Switching to inferior 1 [\u003cnull\u003e] (\u003cnoexec\u003e)]\\n\"\n    ^done\n    (gdb)\n    -gdb-show inferior-tty\n    ^done,value\u003d\"/b\"\n\nThe last `-gdb-show` shows `/b` for inferior 1, we would expect `/a`.\n\n    (gdb) add-inferior\n    [New inferior 2]\n    Added inferior 2\n    (gdb) set inferior-tty /a\n    (gdb) inferior 2\n    [Switching to inferior 2 [\u003cnull\u003e] (\u003cnoexec\u003e)]\n    (gdb) set inferior-tty /b\n    (gdb) python print(gdb.parameter(\u0027inferior-tty\u0027))\n    /b\n    (gdb) inferior 1\n    [Switching to inferior 1 [\u003cnull\u003e] (\u003cnoexec\u003e)]\n    (gdb) python print(gdb.parameter(\u0027inferior-tty\u0027))\n    /b\n\nThe last `gdb.parameter` shows `/b` for inferior 1, we would expect\n`/a`.\n\nThe reason for this is the scratch variable used for the set command.\nParameters (the things conceptually created using add_setshow_*\nfunctions) contain a pointer to a global variable, which is where to\nstore the value when executing the `set` command of the parameter.\nPer-inferior parameters are implemented on top of regular global\nparameters, but in addition specify a \"set\" command that copies the\ncontent of the scratch variable to the current inferior\u0027s structure.\nThe global variable is therefore only used as a scratchpad.\n\nThe CLI show command of the parameter is made to read the value from the\ncurrent inferior\u0027s structure, so it shows the right value, based on the\ncurrent inferior.  MI\u0027s -gdb-show and Python\u0027s gdb.parameter, however,\ntry to be generic, and read the parameter through the global variable\npointer.  For per-inferior parameters, that variable contains the last\nvalue set, not the value for the current inferior.\n\nIn my opinion, this bug can happen because of the bad design of having\nthe scratch variable, it should not be there in the first place (I\npresume that at some point, all parameters were global, and this \"hack\"\nwas added on top of that to get what looked like per-inferior\nparameters).\n\nAdd some versions of some add_setshow functions that take\n\n - a get callback, instead of a pointer to a global variable.  This\n   getter returns the value of the parameter based on the current\n   context.\n - a set callback, which accepts the computed value as a parameter,\n   instead of having to get it from a global variable.\n - a show callback, which receives the value to show as a parameter.\n   The show callback could fetch the value itself (for example, from the\n   current inferior, in the case of inferior-tty), but since we already\n   have a dedicated get callback, I think it\u0027s better to keep the \"how\n   to get the value\" knowledge in a single place.  The core code gets\n   the value using the get callback and passes it to the show callback.\n\nNote that just like before, the show callback is only used for the CLI.\nPython and MI previously obtained the value by reading the global\nvariable.  For commands implemented using these new add_setshow\nfunctions, Python and MI now get the value using the get callback.\n\nConceptually, all this is to separate the \"get the value\" and \"show the\nvalue\" parts of show commands.\n\nThe get/set/show callbacks are stored in the cmd_list_element object.\nThe cmd_list_element::function::{show,set}_cmd fields are used when the\ncmd_list_element\u0027s type is {show,set}_cmd.  Because I want the callback\nfunctions to be adequately typed, based on the parameter type, the\nget/set/show callbacks are stored in unions.  For now, these new\nadd_setshow functions are only available for parameters that are\nstrings, so there are only callbacks that deal with strings.  If, in the\nfuture, we want to do the same for parameters that are integers, we will\nbe able to add additional members in get_func/show_func/set_func.\n\nChange-Id: I5529632c4f6505ec6cab696ab825aa2cb88567cf\n","web_links":[{"name":"gitweb","tooltip":"Open in GitWeb","url":"/gitweb?p\u003dbinutils-gdb.git;a\u003dcommit;h\u003db3c34411e99302aa8249d31f267e6da8d87d2d77"}],"resolve_conflicts_web_links":[{"name":"gitweb","tooltip":"Open in GitWeb","url":"/gitweb?p\u003dbinutils-gdb.git;a\u003dcommit;h\u003db3c34411e99302aa8249d31f267e6da8d87d2d77"}]},"branch":"refs/heads/master"},"d122d62876afa8fd780528690375ecf91321ad96":{"kind":"TRIVIAL_REBASE","_number":18,"created":"2021-06-30 13:20:29.000000000","uploader":{"_account_id":1000001,"name":"Simon Marchi","email":"simon.marchi@efficios.com","username":"simark","avatars":[{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d120","height":120}]},"ref":"refs/changes/31/5831/18","fetch":{"anonymous http":{"url":"https://review.lttng.org/binutils-gdb","ref":"refs/changes/31/5831/18","commands":{"Branch":"git fetch https://review.lttng.org/binutils-gdb refs/changes/31/5831/18 \u0026\u0026 git checkout -b change-5831 FETCH_HEAD","Checkout":"git fetch https://review.lttng.org/binutils-gdb refs/changes/31/5831/18 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://review.lttng.org/binutils-gdb refs/changes/31/5831/18 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://review.lttng.org/binutils-gdb refs/changes/31/5831/18 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://review.lttng.org/binutils-gdb refs/changes/31/5831/18","Reset To":"git fetch https://review.lttng.org/binutils-gdb refs/changes/31/5831/18 \u0026\u0026 git reset --hard FETCH_HEAD"}}},"commit":{"parents":[{"commit":"42fc90d443342ebde12b4cd0d3787b6de31938c4","subject":"gdb: remove cmd_list_element::function::sfunc","web_links":[{"name":"gitweb","tooltip":"Open in GitWeb","url":"/gitweb?p\u003dbinutils-gdb.git;a\u003dcommit;h\u003d42fc90d443342ebde12b4cd0d3787b6de31938c4"}]}],"author":{"name":"Simon Marchi","email":"simon.marchi@polymtl.ca","date":"2021-05-12 15:22:03.000000000","tz":-240},"committer":{"name":"Simon Marchi","email":"simon.marchi@polymtl.ca","date":"2021-06-30 13:17:09.000000000","tz":-240},"subject":"gdb: fix getting per-inferior parameter through MI and Python","message":"gdb: fix getting per-inferior parameter through MI and Python\n\nParameters that are per-inferior are not printed correctly when accessed\nthrough MI or Python.  For example, the `show inferior-tty` value\ndepends on the currently selected inferior:\n\n    (gdb)\n    add-inferior\n    \u0026\"add-inferior\\n\"\n    \u003dthread-group-added,id\u003d\"i2\"\n    ~\"[New inferior 2]\\n\"\n    ~\"Added inferior 2\\n\"\n    ^done\n    (gdb)\n    set inferior-tty /a\n    \u0026\"set inferior-tty /a\\n\"\n    \u003dcmd-param-changed,param\u003d\"inferior-tty\",value\u003d\"/a\"\n    ^done\n    (gdb)\n    inferior 2\n    \u0026\"inferior 2\\n\"\n    ~\"[Switching to inferior 2 [\u003cnull\u003e] (\u003cnoexec\u003e)]\\n\"\n    ^done\n    (gdb)\n    set inferior-tty /b\n    \u0026\"set inferior-tty /b\\n\"\n    \u003dcmd-param-changed,param\u003d\"inferior-tty\",value\u003d\"/b\"\n    ^done\n    (gdb)\n    -gdb-show inferior-tty\n    ^done,value\u003d\"/b\"\n    (gdb)\n    inferior 1\n    \u0026\"inferior 1\\n\"\n    ~\"[Switching to inferior 1 [\u003cnull\u003e] (\u003cnoexec\u003e)]\\n\"\n    ^done\n    (gdb)\n    -gdb-show inferior-tty\n    ^done,value\u003d\"/b\"\n\nThe last `-gdb-show` shows `/b` for inferior 1, we would expect `/a`.\n\n    (gdb) add-inferior\n    [New inferior 2]\n    Added inferior 2\n    (gdb) set inferior-tty /a\n    (gdb) inferior 2\n    [Switching to inferior 2 [\u003cnull\u003e] (\u003cnoexec\u003e)]\n    (gdb) set inferior-tty /b\n    (gdb) python print(gdb.parameter(\u0027inferior-tty\u0027))\n    /b\n    (gdb) inferior 1\n    [Switching to inferior 1 [\u003cnull\u003e] (\u003cnoexec\u003e)]\n    (gdb) python print(gdb.parameter(\u0027inferior-tty\u0027))\n    /b\n\nThe last `gdb.parameter` shows `/b` for inferior 1, we would expect\n`/a`.\n\nThe reason for this is the scratch variable used for the set command.\nParameters (the things conceptually created using add_setshow_*\nfunctions) contain a pointer to a global variable, which is where to\nstore the value when executing the `set` command of the parameter.\nPer-inferior parameters are implemented on top of regular global\nparameters, but in addition specify a \"set\" command that copies the\ncontent of the scratch variable to the current inferior\u0027s structure.\nThe global variable is therefore only used as a scratchpad.\n\nThe CLI show command of the parameter is made to read the value from the\ncurrent inferior\u0027s structure, so it shows the right value, based on the\ncurrent inferior.  MI\u0027s -gdb-show and Python\u0027s gdb.parameter, however,\ntry to be generic, and read the parameter through the global variable\npointer.  For per-inferior parameters, that variable contains the last\nvalue set, not the value for the current inferior.\n\nIn my opinion, this bug can happen because of the bad design of having\nthe scratch variable, it should not be there in the first place (I\npresume that at some point, all parameters were global, and this \"hack\"\nwas added on top of that to get what looked like per-inferior\nparameters).\n\nAdd some versions of some add_setshow functions that take\n\n - a get callback, instead of a pointer to a global variable.  This\n   getter returns the value of the parameter based on the current\n   context.\n - a set callback, which accepts the computed value as a parameter,\n   instead of having to get it from a global variable.\n - a show callback, which receives the value to show as a parameter.\n   The show callback could fetch the value itself (for example, from the\n   current inferior, in the case of inferior-tty), but since we already\n   have a dedicated get callback, I think it\u0027s better to keep the \"how\n   to get the value\" knowledge in a single place.  The core code gets\n   the value using the get callback and passes it to the show callback.\n\nNote that just like before, the show callback is only used for the CLI.\nPython and MI previously obtained the value by reading the global\nvariable.  For commands implemented using these new add_setshow\nfunctions, Python and MI now get the value using the get callback.\n\nConceptually, all this is to separate the \"get the value\" and \"show the\nvalue\" parts of show commands.\n\nThe get/set/show callbacks are stored in the cmd_list_element object.\nThe cmd_list_element::function::{show,set}_cmd fields are used when the\ncmd_list_element\u0027s type is {show,set}_cmd.  Because I want the callback\nfunctions to be adequately typed, based on the parameter type, the\nget/set/show callbacks are stored in unions.  For now, these new\nadd_setshow functions are only available for parameters that are\nstrings, so there are only callbacks that deal with strings.  If, in the\nfuture, we want to do the same for parameters that are integers, we will\nbe able to add additional members in get_func/show_func/set_func.\n\nChange-Id: I5529632c4f6505ec6cab696ab825aa2cb88567cf\n","web_links":[{"name":"gitweb","tooltip":"Open in GitWeb","url":"/gitweb?p\u003dbinutils-gdb.git;a\u003dcommit;h\u003dd122d62876afa8fd780528690375ecf91321ad96"}],"resolve_conflicts_web_links":[{"name":"gitweb","tooltip":"Open in GitWeb","url":"/gitweb?p\u003dbinutils-gdb.git;a\u003dcommit;h\u003dd122d62876afa8fd780528690375ecf91321ad96"}]},"branch":"refs/heads/master"},"d5a2fe007263a3a62ae849479459b72c73f55609":{"kind":"REWORK","_number":19,"created":"2021-06-30 18:49:44.000000000","uploader":{"_account_id":1000001,"name":"Simon Marchi","email":"simon.marchi@efficios.com","username":"simark","avatars":[{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d120","height":120}]},"ref":"refs/changes/31/5831/19","fetch":{"anonymous http":{"url":"https://review.lttng.org/binutils-gdb","ref":"refs/changes/31/5831/19","commands":{"Branch":"git fetch https://review.lttng.org/binutils-gdb refs/changes/31/5831/19 \u0026\u0026 git checkout -b change-5831 FETCH_HEAD","Checkout":"git fetch https://review.lttng.org/binutils-gdb refs/changes/31/5831/19 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://review.lttng.org/binutils-gdb refs/changes/31/5831/19 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://review.lttng.org/binutils-gdb refs/changes/31/5831/19 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://review.lttng.org/binutils-gdb refs/changes/31/5831/19","Reset To":"git fetch https://review.lttng.org/binutils-gdb refs/changes/31/5831/19 \u0026\u0026 git reset --hard FETCH_HEAD"}}},"commit":{"parents":[{"commit":"b8dd01f6ce4a6ac7462bd7f054899938f77b3e03","subject":"gdb: remove cmd_list_element::function::sfunc","web_links":[{"name":"gitweb","tooltip":"Open in GitWeb","url":"/gitweb?p\u003dbinutils-gdb.git;a\u003dcommit;h\u003db8dd01f6ce4a6ac7462bd7f054899938f77b3e03"}]}],"author":{"name":"Simon Marchi","email":"simon.marchi@polymtl.ca","date":"2021-05-12 15:22:03.000000000","tz":-240},"committer":{"name":"Simon Marchi","email":"simon.marchi@polymtl.ca","date":"2021-06-30 18:49:37.000000000","tz":-240},"subject":"gdb: fix getting per-inferior parameter through MI and Python","message":"gdb: fix getting per-inferior parameter through MI and Python\n\nParameters that are per-inferior are not printed correctly when accessed\nthrough MI or Python.  For example, the `show inferior-tty` value\ndepends on the currently selected inferior:\n\n    (gdb)\n    add-inferior\n    \u0026\"add-inferior\\n\"\n    \u003dthread-group-added,id\u003d\"i2\"\n    ~\"[New inferior 2]\\n\"\n    ~\"Added inferior 2\\n\"\n    ^done\n    (gdb)\n    set inferior-tty /a\n    \u0026\"set inferior-tty /a\\n\"\n    \u003dcmd-param-changed,param\u003d\"inferior-tty\",value\u003d\"/a\"\n    ^done\n    (gdb)\n    inferior 2\n    \u0026\"inferior 2\\n\"\n    ~\"[Switching to inferior 2 [\u003cnull\u003e] (\u003cnoexec\u003e)]\\n\"\n    ^done\n    (gdb)\n    set inferior-tty /b\n    \u0026\"set inferior-tty /b\\n\"\n    \u003dcmd-param-changed,param\u003d\"inferior-tty\",value\u003d\"/b\"\n    ^done\n    (gdb)\n    -gdb-show inferior-tty\n    ^done,value\u003d\"/b\"\n    (gdb)\n    inferior 1\n    \u0026\"inferior 1\\n\"\n    ~\"[Switching to inferior 1 [\u003cnull\u003e] (\u003cnoexec\u003e)]\\n\"\n    ^done\n    (gdb)\n    -gdb-show inferior-tty\n    ^done,value\u003d\"/b\"\n\nThe last `-gdb-show` shows `/b` for inferior 1, we would expect `/a`.\n\n    (gdb) add-inferior\n    [New inferior 2]\n    Added inferior 2\n    (gdb) set inferior-tty /a\n    (gdb) inferior 2\n    [Switching to inferior 2 [\u003cnull\u003e] (\u003cnoexec\u003e)]\n    (gdb) set inferior-tty /b\n    (gdb) python print(gdb.parameter(\u0027inferior-tty\u0027))\n    /b\n    (gdb) inferior 1\n    [Switching to inferior 1 [\u003cnull\u003e] (\u003cnoexec\u003e)]\n    (gdb) python print(gdb.parameter(\u0027inferior-tty\u0027))\n    /b\n\nThe last `gdb.parameter` shows `/b` for inferior 1, we would expect\n`/a`.\n\nThe reason for this is the scratch variable used for the set command.\nParameters (the things conceptually created using add_setshow_*\nfunctions) contain a pointer to a global variable, which is where to\nstore the value when executing the `set` command of the parameter.\nPer-inferior parameters are implemented on top of regular global\nparameters, but in addition specify a \"set\" command that copies the\ncontent of the scratch variable to the current inferior\u0027s structure.\nThe global variable is therefore only used as a scratchpad.\n\nThe CLI show command of the parameter is made to read the value from the\ncurrent inferior\u0027s structure, so it shows the right value, based on the\ncurrent inferior.  MI\u0027s -gdb-show and Python\u0027s gdb.parameter, however,\ntry to be generic, and read the parameter through the global variable\npointer.  For per-inferior parameters, that variable contains the last\nvalue set, not the value for the current inferior.\n\nIn my opinion, this bug can happen because of the bad design of having\nthe scratch variable, it should not be there in the first place (I\npresume that at some point, all parameters were global, and this \"hack\"\nwas added on top of that to get what looked like per-inferior\nparameters).\n\nAdd some versions of some add_setshow functions that take\n\n - a get callback, instead of a pointer to a global variable.  This\n   getter returns the value of the parameter based on the current\n   context.\n - a set callback, which accepts the computed value as a parameter,\n   instead of having to get it from a global variable.\n - a show callback, which receives the value to show as a parameter.\n   The show callback could fetch the value itself (for example, from the\n   current inferior, in the case of inferior-tty), but since we already\n   have a dedicated get callback, I think it\u0027s better to keep the \"how\n   to get the value\" knowledge in a single place.  The core code gets\n   the value using the get callback and passes it to the show callback.\n\nNote that just like before, the show callback is only used for the CLI.\nPython and MI previously obtained the value by reading the global\nvariable.  For commands implemented using these new add_setshow\nfunctions, Python and MI now get the value using the get callback.\n\nConceptually, all this is to separate the \"get the value\" and \"show the\nvalue\" parts of show commands.\n\nThe get/set/show callbacks are stored in the cmd_list_element object.\nThe cmd_list_element::function::{show,set}_cmd fields are used when the\ncmd_list_element\u0027s type is {show,set}_cmd.  Because I want the callback\nfunctions to be adequately typed, based on the parameter type, the\nget/set/show callbacks are stored in unions.  For now, these new\nadd_setshow functions are only available for parameters that are\nstrings, so there are only callbacks that deal with strings.  If, in the\nfuture, we want to do the same for parameters that are integers, we will\nbe able to add additional members in get_func/show_func/set_func.\n\nChange-Id: I5529632c4f6505ec6cab696ab825aa2cb88567cf\n","web_links":[{"name":"gitweb","tooltip":"Open in GitWeb","url":"/gitweb?p\u003dbinutils-gdb.git;a\u003dcommit;h\u003dd5a2fe007263a3a62ae849479459b72c73f55609"}],"resolve_conflicts_web_links":[{"name":"gitweb","tooltip":"Open in GitWeb","url":"/gitweb?p\u003dbinutils-gdb.git;a\u003dcommit;h\u003dd5a2fe007263a3a62ae849479459b72c73f55609"}]},"branch":"refs/heads/master"},"5d418a3ef914f0ae0be3a838c9d1ffc41d9e88cd":{"kind":"REWORK","_number":20,"created":"2021-06-30 20:59:03.000000000","uploader":{"_account_id":1000001,"name":"Simon Marchi","email":"simon.marchi@efficios.com","username":"simark","avatars":[{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d120","height":120}]},"ref":"refs/changes/31/5831/20","fetch":{"anonymous http":{"url":"https://review.lttng.org/binutils-gdb","ref":"refs/changes/31/5831/20","commands":{"Branch":"git fetch https://review.lttng.org/binutils-gdb refs/changes/31/5831/20 \u0026\u0026 git checkout -b change-5831 FETCH_HEAD","Checkout":"git fetch https://review.lttng.org/binutils-gdb refs/changes/31/5831/20 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://review.lttng.org/binutils-gdb refs/changes/31/5831/20 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://review.lttng.org/binutils-gdb refs/changes/31/5831/20 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://review.lttng.org/binutils-gdb refs/changes/31/5831/20","Reset To":"git fetch https://review.lttng.org/binutils-gdb refs/changes/31/5831/20 \u0026\u0026 git reset --hard FETCH_HEAD"}}},"commit":{"parents":[{"commit":"b8dd01f6ce4a6ac7462bd7f054899938f77b3e03","subject":"gdb: remove cmd_list_element::function::sfunc","web_links":[{"name":"gitweb","tooltip":"Open in GitWeb","url":"/gitweb?p\u003dbinutils-gdb.git;a\u003dcommit;h\u003db8dd01f6ce4a6ac7462bd7f054899938f77b3e03"}]}],"author":{"name":"Simon Marchi","email":"simon.marchi@polymtl.ca","date":"2021-05-12 15:22:03.000000000","tz":-240},"committer":{"name":"Simon Marchi","email":"simon.marchi@polymtl.ca","date":"2021-06-30 20:57:17.000000000","tz":-240},"subject":"gdb: fix getting per-inferior parameter through MI and Python","message":"gdb: fix getting per-inferior parameter through MI and Python\n\nParameters that are per-inferior are not printed correctly when accessed\nthrough MI or Python.  For example, the `show inferior-tty` value\ndepends on the currently selected inferior:\n\n    (gdb)\n    add-inferior\n    \u0026\"add-inferior\\n\"\n    \u003dthread-group-added,id\u003d\"i2\"\n    ~\"[New inferior 2]\\n\"\n    ~\"Added inferior 2\\n\"\n    ^done\n    (gdb)\n    set inferior-tty /a\n    \u0026\"set inferior-tty /a\\n\"\n    \u003dcmd-param-changed,param\u003d\"inferior-tty\",value\u003d\"/a\"\n    ^done\n    (gdb)\n    inferior 2\n    \u0026\"inferior 2\\n\"\n    ~\"[Switching to inferior 2 [\u003cnull\u003e] (\u003cnoexec\u003e)]\\n\"\n    ^done\n    (gdb)\n    set inferior-tty /b\n    \u0026\"set inferior-tty /b\\n\"\n    \u003dcmd-param-changed,param\u003d\"inferior-tty\",value\u003d\"/b\"\n    ^done\n    (gdb)\n    -gdb-show inferior-tty\n    ^done,value\u003d\"/b\"\n    (gdb)\n    inferior 1\n    \u0026\"inferior 1\\n\"\n    ~\"[Switching to inferior 1 [\u003cnull\u003e] (\u003cnoexec\u003e)]\\n\"\n    ^done\n    (gdb)\n    -gdb-show inferior-tty\n    ^done,value\u003d\"/b\"\n\nThe last `-gdb-show` shows `/b` for inferior 1, we would expect `/a`.\n\n    (gdb) add-inferior\n    [New inferior 2]\n    Added inferior 2\n    (gdb) set inferior-tty /a\n    (gdb) inferior 2\n    [Switching to inferior 2 [\u003cnull\u003e] (\u003cnoexec\u003e)]\n    (gdb) set inferior-tty /b\n    (gdb) python print(gdb.parameter(\u0027inferior-tty\u0027))\n    /b\n    (gdb) inferior 1\n    [Switching to inferior 1 [\u003cnull\u003e] (\u003cnoexec\u003e)]\n    (gdb) python print(gdb.parameter(\u0027inferior-tty\u0027))\n    /b\n\nThe last `gdb.parameter` shows `/b` for inferior 1, we would expect\n`/a`.\n\nThe reason for this is the scratch variable used for the set command.\nParameters (the things conceptually created using add_setshow_*\nfunctions) contain a pointer to a global variable, which is where to\nstore the value when executing the `set` command of the parameter.\nPer-inferior parameters are implemented on top of regular global\nparameters, but in addition specify a \"set\" command that copies the\ncontent of the scratch variable to the current inferior\u0027s structure.\nThe global variable is therefore only used as a scratchpad.\n\nThe CLI show command of the parameter is made to read the value from the\ncurrent inferior\u0027s structure, so it shows the right value, based on the\ncurrent inferior.  MI\u0027s -gdb-show and Python\u0027s gdb.parameter, however,\ntry to be generic, and read the parameter through the global variable\npointer.  For per-inferior parameters, that variable contains the last\nvalue set, not the value for the current inferior.\n\nIn my opinion, this bug can happen because of the bad design of having\nthe scratch variable, it should not be there in the first place (I\npresume that at some point, all parameters were global, and this \"hack\"\nwas added on top of that to get what looked like per-inferior\nparameters).\n\nAdd some versions of some add_setshow functions that take\n\n - a get callback, instead of a pointer to a global variable.  This\n   getter returns the value of the parameter based on the current\n   context.\n - a set callback, which accepts the computed value as a parameter,\n   instead of having to get it from a global variable.\n - a show callback, which receives the value to show as a parameter.\n   The show callback could fetch the value itself (for example, from the\n   current inferior, in the case of inferior-tty), but since we already\n   have a dedicated get callback, I think it\u0027s better to keep the \"how\n   to get the value\" knowledge in a single place.  The core code gets\n   the value using the get callback and passes it to the show callback.\n\nNote that just like before, the show callback is only used for the CLI.\nPython and MI previously obtained the value by reading the global\nvariable.  For commands implemented using these new add_setshow\nfunctions, Python and MI now get the value using the get callback.\n\nConceptually, all this is to separate the \"get the value\" and \"show the\nvalue\" parts of show commands.\n\nThe get/set/show callbacks are stored in the cmd_list_element object.\nThe cmd_list_element::function::{show,set}_cmd fields are used when the\ncmd_list_element\u0027s type is {show,set}_cmd.  Because I want the callback\nfunctions to be adequately typed, based on the parameter type, the\nget/set/show callbacks are stored in unions.  For now, these new\nadd_setshow functions are only available for parameters that are\nstrings, so there are only callbacks that deal with strings.  If, in the\nfuture, we want to do the same for parameters that are integers, we will\nbe able to add additional members in get_func/show_func/set_func.\n\nChange-Id: I5529632c4f6505ec6cab696ab825aa2cb88567cf\n","web_links":[{"name":"gitweb","tooltip":"Open in GitWeb","url":"/gitweb?p\u003dbinutils-gdb.git;a\u003dcommit;h\u003d5d418a3ef914f0ae0be3a838c9d1ffc41d9e88cd"}],"resolve_conflicts_web_links":[{"name":"gitweb","tooltip":"Open in GitWeb","url":"/gitweb?p\u003dbinutils-gdb.git;a\u003dcommit;h\u003d5d418a3ef914f0ae0be3a838c9d1ffc41d9e88cd"}]},"branch":"refs/heads/master"},"cb131296d534e872d8039c397a127e7691564693":{"kind":"REWORK","_number":21,"created":"2021-07-06 18:44:38.000000000","uploader":{"_account_id":1000001,"name":"Simon Marchi","email":"simon.marchi@efficios.com","username":"simark","avatars":[{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d120","height":120}]},"ref":"refs/changes/31/5831/21","fetch":{"anonymous http":{"url":"https://review.lttng.org/binutils-gdb","ref":"refs/changes/31/5831/21","commands":{"Branch":"git fetch https://review.lttng.org/binutils-gdb refs/changes/31/5831/21 \u0026\u0026 git checkout -b change-5831 FETCH_HEAD","Checkout":"git fetch https://review.lttng.org/binutils-gdb refs/changes/31/5831/21 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://review.lttng.org/binutils-gdb refs/changes/31/5831/21 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://review.lttng.org/binutils-gdb refs/changes/31/5831/21 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://review.lttng.org/binutils-gdb refs/changes/31/5831/21","Reset To":"git fetch https://review.lttng.org/binutils-gdb refs/changes/31/5831/21 \u0026\u0026 git reset --hard FETCH_HEAD"}}},"commit":{"parents":[{"commit":"00d36037cd938673d5a428f2de1610fff71c25dd","subject":"gdb.base/setshow.exp: split in procs","web_links":[{"name":"gitweb","tooltip":"Open in GitWeb","url":"/gitweb?p\u003dbinutils-gdb.git;a\u003dcommit;h\u003d00d36037cd938673d5a428f2de1610fff71c25dd"}]}],"author":{"name":"Simon Marchi","email":"simon.marchi@polymtl.ca","date":"2021-07-06 18:22:28.000000000","tz":-240},"committer":{"name":"Simon Marchi","email":"simon.marchi@polymtl.ca","date":"2021-07-06 18:44:22.000000000","tz":-240},"subject":"gdb: fix getting per-inferior parameter through MI and Python","message":"gdb: fix getting per-inferior parameter through MI and Python\n\nParameters that are per-inferior are not printed correctly when accessed\nthrough MI or Python.  For example, the `show inferior-tty` value\ndepends on the currently selected inferior:\n\n    (gdb)\n    add-inferior\n    \u0026\"add-inferior\\n\"\n    \u003dthread-group-added,id\u003d\"i2\"\n    ~\"[New inferior 2]\\n\"\n    ~\"Added inferior 2\\n\"\n    ^done\n    (gdb)\n    set inferior-tty /a\n    \u0026\"set inferior-tty /a\\n\"\n    \u003dcmd-param-changed,param\u003d\"inferior-tty\",value\u003d\"/a\"\n    ^done\n    (gdb)\n    inferior 2\n    \u0026\"inferior 2\\n\"\n    ~\"[Switching to inferior 2 [\u003cnull\u003e] (\u003cnoexec\u003e)]\\n\"\n    ^done\n    (gdb)\n    set inferior-tty /b\n    \u0026\"set inferior-tty /b\\n\"\n    \u003dcmd-param-changed,param\u003d\"inferior-tty\",value\u003d\"/b\"\n    ^done\n    (gdb)\n    -gdb-show inferior-tty\n    ^done,value\u003d\"/b\"\n    (gdb)\n    inferior 1\n    \u0026\"inferior 1\\n\"\n    ~\"[Switching to inferior 1 [\u003cnull\u003e] (\u003cnoexec\u003e)]\\n\"\n    ^done\n    (gdb)\n    -gdb-show inferior-tty\n    ^done,value\u003d\"/b\"\n\nThe last `-gdb-show` shows `/b` for inferior 1, we would expect `/a`.\n\n    (gdb) add-inferior\n    [New inferior 2]\n    Added inferior 2\n    (gdb) set inferior-tty /a\n    (gdb) inferior 2\n    [Switching to inferior 2 [\u003cnull\u003e] (\u003cnoexec\u003e)]\n    (gdb) set inferior-tty /b\n    (gdb) python print(gdb.parameter(\u0027inferior-tty\u0027))\n    /b\n    (gdb) inferior 1\n    [Switching to inferior 1 [\u003cnull\u003e] (\u003cnoexec\u003e)]\n    (gdb) python print(gdb.parameter(\u0027inferior-tty\u0027))\n    /b\n\nThe last `gdb.parameter` shows `/b` for inferior 1, we would expect\n`/a`.\n\nThe reason for this is the scratch variable used for the set command.\nParameters (the things conceptually created using add_setshow_*\nfunctions) contain a pointer to a global variable, which is where to\nstore the value when executing the `set` command of the parameter.\nPer-inferior parameters are implemented on top of regular global\nparameters, but in addition specify a \"set\" command that copies the\ncontent of the scratch variable to the current inferior\u0027s structure.\nThe global variable is therefore only used as a scratchpad.\n\nThe CLI show command of the parameter is made to read the value from the\ncurrent inferior\u0027s structure, so it shows the right value, based on the\ncurrent inferior.  MI\u0027s -gdb-show and Python\u0027s gdb.parameter, however,\ntry to be generic, and read the parameter through the global variable\npointer.  For per-inferior parameters, that variable contains the last\nvalue set, not the value for the current inferior.\n\nIn my opinion, this bug can happen because of the bad design of having\nthe scratch variable, it should not be there in the first place (I\npresume that at some point, all parameters were global, and this \"hack\"\nwas added on top of that to get what looked like per-inferior\nparameters).\n\nAdd some versions of some add_setshow functions that take\n\n - a get callback, instead of a pointer to a global variable.  This\n   getter returns the value of the parameter based on the current\n   context.\n - a set callback, which accepts the computed value as a parameter,\n   instead of having to get it from a global variable.\n - a show callback, which receives the value to show as a parameter.\n   The show callback could fetch the value itself (for example, from the\n   current inferior, in the case of inferior-tty), but since we already\n   have a dedicated get callback, I think it\u0027s better to keep the \"how\n   to get the value\" knowledge in a single place.  The core code gets\n   the value using the get callback and passes it to the show callback.\n\nNote that just like before, the show callback is only used for the CLI.\nPython and MI previously obtained the value by reading the global\nvariable.  For commands implemented using these new add_setshow\nfunctions, Python and MI now get the value using the get callback.\n\nConceptually, all this is to separate the \"get the value\" and \"show the\nvalue\" parts of show commands.\n\nThe get/set/show callbacks are stored in the cmd_list_element object.\nThe cmd_list_element::function::{show,set}_cmd fields are used when the\ncmd_list_element\u0027s type is {show,set}_cmd.  Because I want the callback\nfunctions to be adequately typed, based on the parameter type, the\nget/set/show callbacks are stored in unions.  For now, these new\nadd_setshow functions are only available for parameters that are\nstrings, so there are only callbacks that deal with strings.  If, in the\nfuture, we want to do the same for parameters that are integers, we will\nbe able to add additional members in get_func/show_func/set_func.\n\nChange-Id: I5529632c4f6505ec6cab696ab825aa2cb88567cf\n","web_links":[{"name":"gitweb","tooltip":"Open in GitWeb","url":"/gitweb?p\u003dbinutils-gdb.git;a\u003dcommit;h\u003dcb131296d534e872d8039c397a127e7691564693"}],"resolve_conflicts_web_links":[{"name":"gitweb","tooltip":"Open in GitWeb","url":"/gitweb?p\u003dbinutils-gdb.git;a\u003dcommit;h\u003dcb131296d534e872d8039c397a127e7691564693"}]},"branch":"refs/heads/master"},"c10a24b21ff521e60e2631dfc911e5a7ae1a79a3":{"kind":"TRIVIAL_REBASE","_number":22,"created":"2021-07-08 14:15:28.000000000","uploader":{"_account_id":1000001,"name":"Simon Marchi","email":"simon.marchi@efficios.com","username":"simark","avatars":[{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d120","height":120}]},"ref":"refs/changes/31/5831/22","fetch":{"anonymous http":{"url":"https://review.lttng.org/binutils-gdb","ref":"refs/changes/31/5831/22","commands":{"Branch":"git fetch https://review.lttng.org/binutils-gdb refs/changes/31/5831/22 \u0026\u0026 git checkout -b change-5831 FETCH_HEAD","Checkout":"git fetch https://review.lttng.org/binutils-gdb refs/changes/31/5831/22 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://review.lttng.org/binutils-gdb refs/changes/31/5831/22 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://review.lttng.org/binutils-gdb refs/changes/31/5831/22 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://review.lttng.org/binutils-gdb refs/changes/31/5831/22","Reset To":"git fetch https://review.lttng.org/binutils-gdb refs/changes/31/5831/22 \u0026\u0026 git reset --hard FETCH_HEAD"}}},"commit":{"parents":[{"commit":"22e96118a41580b1caea8d0cbb2bf451ca5d7358","subject":"gdb.base/setshow.exp: split in procs","web_links":[{"name":"gitweb","tooltip":"Open in GitWeb","url":"/gitweb?p\u003dbinutils-gdb.git;a\u003dcommit;h\u003d22e96118a41580b1caea8d0cbb2bf451ca5d7358"}]}],"author":{"name":"Simon Marchi","email":"simon.marchi@polymtl.ca","date":"2021-07-06 18:22:28.000000000","tz":-240},"committer":{"name":"Simon Marchi","email":"simon.marchi@efficios.com","date":"2021-07-08 14:15:03.000000000","tz":-240},"subject":"gdb: fix getting per-inferior parameter through MI and Python","message":"gdb: fix getting per-inferior parameter through MI and Python\n\nParameters that are per-inferior are not printed correctly when accessed\nthrough MI or Python.  For example, the `show inferior-tty` value\ndepends on the currently selected inferior:\n\n    (gdb)\n    add-inferior\n    \u0026\"add-inferior\\n\"\n    \u003dthread-group-added,id\u003d\"i2\"\n    ~\"[New inferior 2]\\n\"\n    ~\"Added inferior 2\\n\"\n    ^done\n    (gdb)\n    set inferior-tty /a\n    \u0026\"set inferior-tty /a\\n\"\n    \u003dcmd-param-changed,param\u003d\"inferior-tty\",value\u003d\"/a\"\n    ^done\n    (gdb)\n    inferior 2\n    \u0026\"inferior 2\\n\"\n    ~\"[Switching to inferior 2 [\u003cnull\u003e] (\u003cnoexec\u003e)]\\n\"\n    ^done\n    (gdb)\n    set inferior-tty /b\n    \u0026\"set inferior-tty /b\\n\"\n    \u003dcmd-param-changed,param\u003d\"inferior-tty\",value\u003d\"/b\"\n    ^done\n    (gdb)\n    -gdb-show inferior-tty\n    ^done,value\u003d\"/b\"\n    (gdb)\n    inferior 1\n    \u0026\"inferior 1\\n\"\n    ~\"[Switching to inferior 1 [\u003cnull\u003e] (\u003cnoexec\u003e)]\\n\"\n    ^done\n    (gdb)\n    -gdb-show inferior-tty\n    ^done,value\u003d\"/b\"\n\nThe last `-gdb-show` shows `/b` for inferior 1, we would expect `/a`.\n\n    (gdb) add-inferior\n    [New inferior 2]\n    Added inferior 2\n    (gdb) set inferior-tty /a\n    (gdb) inferior 2\n    [Switching to inferior 2 [\u003cnull\u003e] (\u003cnoexec\u003e)]\n    (gdb) set inferior-tty /b\n    (gdb) python print(gdb.parameter(\u0027inferior-tty\u0027))\n    /b\n    (gdb) inferior 1\n    [Switching to inferior 1 [\u003cnull\u003e] (\u003cnoexec\u003e)]\n    (gdb) python print(gdb.parameter(\u0027inferior-tty\u0027))\n    /b\n\nThe last `gdb.parameter` shows `/b` for inferior 1, we would expect\n`/a`.\n\nThe reason for this is the scratch variable used for the set command.\nParameters (the things conceptually created using add_setshow_*\nfunctions) contain a pointer to a global variable, which is where to\nstore the value when executing the `set` command of the parameter.\nPer-inferior parameters are implemented on top of regular global\nparameters, but in addition specify a \"set\" command that copies the\ncontent of the scratch variable to the current inferior\u0027s structure.\nThe global variable is therefore only used as a scratchpad.\n\nThe CLI show command of the parameter is made to read the value from the\ncurrent inferior\u0027s structure, so it shows the right value, based on the\ncurrent inferior.  MI\u0027s -gdb-show and Python\u0027s gdb.parameter, however,\ntry to be generic, and read the parameter through the global variable\npointer.  For per-inferior parameters, that variable contains the last\nvalue set, not the value for the current inferior.\n\nIn my opinion, this bug can happen because of the bad design of having\nthe scratch variable, it should not be there in the first place (I\npresume that at some point, all parameters were global, and this \"hack\"\nwas added on top of that to get what looked like per-inferior\nparameters).\n\nAdd some versions of some add_setshow functions that take\n\n - a get callback, instead of a pointer to a global variable.  This\n   getter returns the value of the parameter based on the current\n   context.\n - a set callback, which accepts the computed value as a parameter,\n   instead of having to get it from a global variable.\n - a show callback, which receives the value to show as a parameter.\n   The show callback could fetch the value itself (for example, from the\n   current inferior, in the case of inferior-tty), but since we already\n   have a dedicated get callback, I think it\u0027s better to keep the \"how\n   to get the value\" knowledge in a single place.  The core code gets\n   the value using the get callback and passes it to the show callback.\n\nNote that just like before, the show callback is only used for the CLI.\nPython and MI previously obtained the value by reading the global\nvariable.  For commands implemented using these new add_setshow\nfunctions, Python and MI now get the value using the get callback.\n\nConceptually, all this is to separate the \"get the value\" and \"show the\nvalue\" parts of show commands.\n\nThe get/set/show callbacks are stored in the cmd_list_element object.\nThe cmd_list_element::function::{show,set}_cmd fields are used when the\ncmd_list_element\u0027s type is {show,set}_cmd.  Because I want the callback\nfunctions to be adequately typed, based on the parameter type, the\nget/set/show callbacks are stored in unions.  For now, these new\nadd_setshow functions are only available for parameters that are\nstrings, so there are only callbacks that deal with strings.  If, in the\nfuture, we want to do the same for parameters that are integers, we will\nbe able to add additional members in get_func/show_func/set_func.\n\nChange-Id: I5529632c4f6505ec6cab696ab825aa2cb88567cf\n","web_links":[{"name":"gitweb","tooltip":"Open in GitWeb","url":"/gitweb?p\u003dbinutils-gdb.git;a\u003dcommit;h\u003dc10a24b21ff521e60e2631dfc911e5a7ae1a79a3"}],"resolve_conflicts_web_links":[{"name":"gitweb","tooltip":"Open in GitWeb","url":"/gitweb?p\u003dbinutils-gdb.git;a\u003dcommit;h\u003dc10a24b21ff521e60e2631dfc911e5a7ae1a79a3"}]},"branch":"refs/heads/master"},"d460facc14614d2dcf0cd49dede348598360743f":{"kind":"REWORK","_number":23,"created":"2021-07-08 15:19:19.000000000","uploader":{"_account_id":1000001,"name":"Simon Marchi","email":"simon.marchi@efficios.com","username":"simark","avatars":[{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d120","height":120}]},"ref":"refs/changes/31/5831/23","fetch":{"anonymous http":{"url":"https://review.lttng.org/binutils-gdb","ref":"refs/changes/31/5831/23","commands":{"Branch":"git fetch https://review.lttng.org/binutils-gdb refs/changes/31/5831/23 \u0026\u0026 git checkout -b change-5831 FETCH_HEAD","Checkout":"git fetch https://review.lttng.org/binutils-gdb refs/changes/31/5831/23 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://review.lttng.org/binutils-gdb refs/changes/31/5831/23 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://review.lttng.org/binutils-gdb refs/changes/31/5831/23 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://review.lttng.org/binutils-gdb refs/changes/31/5831/23","Reset To":"git fetch https://review.lttng.org/binutils-gdb refs/changes/31/5831/23 \u0026\u0026 git reset --hard FETCH_HEAD"}}},"commit":{"parents":[{"commit":"22e96118a41580b1caea8d0cbb2bf451ca5d7358","subject":"gdb.base/setshow.exp: split in procs","web_links":[{"name":"gitweb","tooltip":"Open in GitWeb","url":"/gitweb?p\u003dbinutils-gdb.git;a\u003dcommit;h\u003d22e96118a41580b1caea8d0cbb2bf451ca5d7358"}]}],"author":{"name":"Simon Marchi","email":"simon.marchi@polymtl.ca","date":"2021-07-06 18:22:28.000000000","tz":-240},"committer":{"name":"Simon Marchi","email":"simon.marchi@polymtl.ca","date":"2021-07-08 15:17:42.000000000","tz":-240},"subject":"gdb: fix getting per-inferior parameter through MI and Python","message":"gdb: fix getting per-inferior parameter through MI and Python\n\nParameters that are per-inferior are not printed correctly when accessed\nthrough MI or Python.  For example, the `show inferior-tty` value\ndepends on the currently selected inferior:\n\n    (gdb)\n    add-inferior\n    \u0026\"add-inferior\\n\"\n    \u003dthread-group-added,id\u003d\"i2\"\n    ~\"[New inferior 2]\\n\"\n    ~\"Added inferior 2\\n\"\n    ^done\n    (gdb)\n    set inferior-tty /a\n    \u0026\"set inferior-tty /a\\n\"\n    \u003dcmd-param-changed,param\u003d\"inferior-tty\",value\u003d\"/a\"\n    ^done\n    (gdb)\n    inferior 2\n    \u0026\"inferior 2\\n\"\n    ~\"[Switching to inferior 2 [\u003cnull\u003e] (\u003cnoexec\u003e)]\\n\"\n    ^done\n    (gdb)\n    set inferior-tty /b\n    \u0026\"set inferior-tty /b\\n\"\n    \u003dcmd-param-changed,param\u003d\"inferior-tty\",value\u003d\"/b\"\n    ^done\n    (gdb)\n    -gdb-show inferior-tty\n    ^done,value\u003d\"/b\"\n    (gdb)\n    inferior 1\n    \u0026\"inferior 1\\n\"\n    ~\"[Switching to inferior 1 [\u003cnull\u003e] (\u003cnoexec\u003e)]\\n\"\n    ^done\n    (gdb)\n    -gdb-show inferior-tty\n    ^done,value\u003d\"/b\"\n\nThe last `-gdb-show` shows `/b` for inferior 1, we would expect `/a`.\n\n    (gdb) add-inferior\n    [New inferior 2]\n    Added inferior 2\n    (gdb) set inferior-tty /a\n    (gdb) inferior 2\n    [Switching to inferior 2 [\u003cnull\u003e] (\u003cnoexec\u003e)]\n    (gdb) set inferior-tty /b\n    (gdb) python print(gdb.parameter(\u0027inferior-tty\u0027))\n    /b\n    (gdb) inferior 1\n    [Switching to inferior 1 [\u003cnull\u003e] (\u003cnoexec\u003e)]\n    (gdb) python print(gdb.parameter(\u0027inferior-tty\u0027))\n    /b\n\nThe last `gdb.parameter` shows `/b` for inferior 1, we would expect\n`/a`.\n\nThe reason for this is the scratch variable used for the set command.\nParameters (the things conceptually created using add_setshow_*\nfunctions) contain a pointer to a global variable, which is where to\nstore the value when executing the `set` command of the parameter.\nPer-inferior parameters are implemented on top of regular global\nparameters, but in addition specify a \"set\" command that copies the\ncontent of the scratch variable to the current inferior\u0027s structure.\nThe global variable is therefore only used as a scratchpad.\n\nThe CLI show command of the parameter is made to read the value from the\ncurrent inferior\u0027s structure, so it shows the right value, based on the\ncurrent inferior.  MI\u0027s -gdb-show and Python\u0027s gdb.parameter, however,\ntry to be generic, and read the parameter through the global variable\npointer.  For per-inferior parameters, that variable contains the last\nvalue set, not the value for the current inferior.\n\nIn my opinion, this bug can happen because of the bad design of having\nthe scratch variable, it should not be there in the first place (I\npresume that at some point, all parameters were global, and this \"hack\"\nwas added on top of that to get what looked like per-inferior\nparameters).\n\nAdd some versions of some add_setshow functions that take\n\n - a get callback, instead of a pointer to a global variable.  This\n   getter returns the value of the parameter based on the current\n   context.\n - a set callback, which accepts the computed value as a parameter,\n   instead of having to get it from a global variable.\n - a show callback, which receives the value to show as a parameter.\n   The show callback could fetch the value itself (for example, from the\n   current inferior, in the case of inferior-tty), but since we already\n   have a dedicated get callback, I think it\u0027s better to keep the \"how\n   to get the value\" knowledge in a single place.  The core code gets\n   the value using the get callback and passes it to the show callback.\n\nNote that just like before, the show callback is only used for the CLI.\nPython and MI previously obtained the value by reading the global\nvariable.  For commands implemented using these new add_setshow\nfunctions, Python and MI now get the value using the get callback.\n\nConceptually, all this is to separate the \"get the value\" and \"show the\nvalue\" parts of show commands.\n\nThe get/set/show callbacks are stored in the cmd_list_element object.\nThe cmd_list_element::function::{show,set}_cmd fields are used when the\ncmd_list_element\u0027s type is {show,set}_cmd.  Because I want the callback\nfunctions to be adequately typed, based on the parameter type, the\nget/set/show callbacks are stored in unions.  For now, these new\nadd_setshow functions are only available for parameters that are\nstrings, so there are only callbacks that deal with strings.  If, in the\nfuture, we want to do the same for parameters that are integers, we will\nbe able to add additional members in get_func/show_func/set_func.\n\nChange-Id: I5529632c4f6505ec6cab696ab825aa2cb88567cf\n","web_links":[{"name":"gitweb","tooltip":"Open in GitWeb","url":"/gitweb?p\u003dbinutils-gdb.git;a\u003dcommit;h\u003dd460facc14614d2dcf0cd49dede348598360743f"}],"resolve_conflicts_web_links":[{"name":"gitweb","tooltip":"Open in GitWeb","url":"/gitweb?p\u003dbinutils-gdb.git;a\u003dcommit;h\u003dd460facc14614d2dcf0cd49dede348598360743f"}]},"branch":"refs/heads/master"},"417499320be7a41db9237ad146c03c620be19e21":{"kind":"REWORK","_number":24,"created":"2021-07-09 04:20:23.000000000","uploader":{"_account_id":1000001,"name":"Simon Marchi","email":"simon.marchi@efficios.com","username":"simark","avatars":[{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d120","height":120}]},"ref":"refs/changes/31/5831/24","fetch":{"anonymous http":{"url":"https://review.lttng.org/binutils-gdb","ref":"refs/changes/31/5831/24","commands":{"Branch":"git fetch https://review.lttng.org/binutils-gdb refs/changes/31/5831/24 \u0026\u0026 git checkout -b change-5831 FETCH_HEAD","Checkout":"git fetch https://review.lttng.org/binutils-gdb refs/changes/31/5831/24 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://review.lttng.org/binutils-gdb refs/changes/31/5831/24 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://review.lttng.org/binutils-gdb refs/changes/31/5831/24 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://review.lttng.org/binutils-gdb refs/changes/31/5831/24","Reset To":"git fetch https://review.lttng.org/binutils-gdb refs/changes/31/5831/24 \u0026\u0026 git reset --hard FETCH_HEAD"}}},"commit":{"parents":[{"commit":"58c80e3f7128429a634d04d34a4bf1e8bec30f5d","subject":"gdb: c++-ify ARM disassembler options initialization","web_links":[{"name":"gitweb","tooltip":"Open in GitWeb","url":"/gitweb?p\u003dbinutils-gdb.git;a\u003dcommit;h\u003d58c80e3f7128429a634d04d34a4bf1e8bec30f5d"}]}],"author":{"name":"Simon Marchi","email":"simon.marchi@polymtl.ca","date":"2021-07-09 00:21:23.000000000","tz":-240},"committer":{"name":"Simon Marchi","email":"simon.marchi@polymtl.ca","date":"2021-07-09 04:20:11.000000000","tz":-240},"subject":"gdb: fix getting per-inferior parameter through MI and Python","message":"gdb: fix getting per-inferior parameter through MI and Python\n\nParameters that are per-inferior are not printed correctly when accessed\nthrough MI or Python.  For example, the `show inferior-tty` value\ndepends on the currently selected inferior:\n\n    (gdb)\n    add-inferior\n    \u0026\"add-inferior\\n\"\n    \u003dthread-group-added,id\u003d\"i2\"\n    ~\"[New inferior 2]\\n\"\n    ~\"Added inferior 2\\n\"\n    ^done\n    (gdb)\n    set inferior-tty /a\n    \u0026\"set inferior-tty /a\\n\"\n    \u003dcmd-param-changed,param\u003d\"inferior-tty\",value\u003d\"/a\"\n    ^done\n    (gdb)\n    inferior 2\n    \u0026\"inferior 2\\n\"\n    ~\"[Switching to inferior 2 [\u003cnull\u003e] (\u003cnoexec\u003e)]\\n\"\n    ^done\n    (gdb)\n    set inferior-tty /b\n    \u0026\"set inferior-tty /b\\n\"\n    \u003dcmd-param-changed,param\u003d\"inferior-tty\",value\u003d\"/b\"\n    ^done\n    (gdb)\n    -gdb-show inferior-tty\n    ^done,value\u003d\"/b\"\n    (gdb)\n    inferior 1\n    \u0026\"inferior 1\\n\"\n    ~\"[Switching to inferior 1 [\u003cnull\u003e] (\u003cnoexec\u003e)]\\n\"\n    ^done\n    (gdb)\n    -gdb-show inferior-tty\n    ^done,value\u003d\"/b\"\n\nThe last `-gdb-show` shows `/b` for inferior 1, we would expect `/a`.\n\n    (gdb) add-inferior\n    [New inferior 2]\n    Added inferior 2\n    (gdb) set inferior-tty /a\n    (gdb) inferior 2\n    [Switching to inferior 2 [\u003cnull\u003e] (\u003cnoexec\u003e)]\n    (gdb) set inferior-tty /b\n    (gdb) python print(gdb.parameter(\u0027inferior-tty\u0027))\n    /b\n    (gdb) inferior 1\n    [Switching to inferior 1 [\u003cnull\u003e] (\u003cnoexec\u003e)]\n    (gdb) python print(gdb.parameter(\u0027inferior-tty\u0027))\n    /b\n\nThe last `gdb.parameter` shows `/b` for inferior 1, we would expect\n`/a`.\n\nThe reason for this is the scratch variable used for the set command.\nParameters (the things conceptually created using add_setshow_*\nfunctions) contain a pointer to a global variable, which is where to\nstore the value when executing the `set` command of the parameter.\nPer-inferior parameters are implemented on top of regular global\nparameters, but in addition specify a \"set\" command that copies the\ncontent of the scratch variable to the current inferior\u0027s structure.\nThe global variable is therefore only used as a scratchpad.\n\nThe CLI show command of the parameter is made to read the value from the\ncurrent inferior\u0027s structure, so it shows the right value, based on the\ncurrent inferior.  MI\u0027s -gdb-show and Python\u0027s gdb.parameter, however,\ntry to be generic, and read the parameter through the global variable\npointer.  For per-inferior parameters, that variable contains the last\nvalue set, not the value for the current inferior.\n\nIn my opinion, this bug can happen because of the bad design of having\nthe scratch variable, it should not be there in the first place (I\npresume that at some point, all parameters were global, and this \"hack\"\nwas added on top of that to get what looked like per-inferior\nparameters).\n\nAdd some versions of some add_setshow functions that take\n\n - a get callback, instead of a pointer to a global variable.  This\n   getter returns the value of the parameter based on the current\n   context.\n - a set callback, which accepts the computed value as a parameter,\n   instead of having to get it from a global variable.\n - a show callback, which receives the value to show as a parameter.\n   The show callback could fetch the value itself (for example, from the\n   current inferior, in the case of inferior-tty), but since we already\n   have a dedicated get callback, I think it\u0027s better to keep the \"how\n   to get the value\" knowledge in a single place.  The core code gets\n   the value using the get callback and passes it to the show callback.\n\nNote that just like before, the show callback is only used for the CLI.\nPython and MI previously obtained the value by reading the global\nvariable.  For commands implemented using these new add_setshow\nfunctions, Python and MI now get the value using the get callback.\n\nConceptually, all this is to separate the \"get the value\" and \"show the\nvalue\" parts of show commands.\n\nThe get/set/show callbacks are stored in the cmd_list_element object.\nThe cmd_list_element::function::{show,set}_cmd fields are used when the\ncmd_list_element\u0027s type is {show,set}_cmd.  Because I want the callback\nfunctions to be adequately typed, based on the parameter type, the\nget/set/show callbacks are stored in unions.  For now, these new\nadd_setshow functions are only available for parameters that are\nstrings, so there are only callbacks that deal with strings.  If, in the\nfuture, we want to do the same for parameters that are integers, we will\nbe able to add additional members in get_func/show_func/set_func.\n\nChange-Id: I5529632c4f6505ec6cab696ab825aa2cb88567cf\n","web_links":[{"name":"gitweb","tooltip":"Open in GitWeb","url":"/gitweb?p\u003dbinutils-gdb.git;a\u003dcommit;h\u003d417499320be7a41db9237ad146c03c620be19e21"}],"resolve_conflicts_web_links":[{"name":"gitweb","tooltip":"Open in GitWeb","url":"/gitweb?p\u003dbinutils-gdb.git;a\u003dcommit;h\u003d417499320be7a41db9237ad146c03c620be19e21"}]},"branch":"refs/heads/master"},"8ae6f0b4beeb2024b71c2a0021bf814ac8a642cc":{"kind":"TRIVIAL_REBASE","_number":25,"created":"2021-07-09 15:07:16.000000000","uploader":{"_account_id":1000001,"name":"Simon Marchi","email":"simon.marchi@efficios.com","username":"simark","avatars":[{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d120","height":120}]},"ref":"refs/changes/31/5831/25","fetch":{"anonymous http":{"url":"https://review.lttng.org/binutils-gdb","ref":"refs/changes/31/5831/25","commands":{"Branch":"git fetch https://review.lttng.org/binutils-gdb refs/changes/31/5831/25 \u0026\u0026 git checkout -b change-5831 FETCH_HEAD","Checkout":"git fetch https://review.lttng.org/binutils-gdb refs/changes/31/5831/25 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://review.lttng.org/binutils-gdb refs/changes/31/5831/25 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://review.lttng.org/binutils-gdb refs/changes/31/5831/25 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://review.lttng.org/binutils-gdb refs/changes/31/5831/25","Reset To":"git fetch https://review.lttng.org/binutils-gdb refs/changes/31/5831/25 \u0026\u0026 git reset --hard FETCH_HEAD"}}},"commit":{"parents":[{"commit":"a737b87243f2a50e726ab694593f911ae0a0568f","subject":"gdb: c++-ify ARM disassembler options initialization","web_links":[{"name":"gitweb","tooltip":"Open in GitWeb","url":"/gitweb?p\u003dbinutils-gdb.git;a\u003dcommit;h\u003da737b87243f2a50e726ab694593f911ae0a0568f"}]}],"author":{"name":"Simon Marchi","email":"simon.marchi@polymtl.ca","date":"2021-07-09 00:21:23.000000000","tz":-240},"committer":{"name":"Simon Marchi","email":"simon.marchi@polymtl.ca","date":"2021-07-09 15:07:09.000000000","tz":-240},"subject":"gdb: fix getting per-inferior parameter through MI and Python","message":"gdb: fix getting per-inferior parameter through MI and Python\n\nParameters that are per-inferior are not printed correctly when accessed\nthrough MI or Python.  For example, the `show inferior-tty` value\ndepends on the currently selected inferior:\n\n    (gdb)\n    add-inferior\n    \u0026\"add-inferior\\n\"\n    \u003dthread-group-added,id\u003d\"i2\"\n    ~\"[New inferior 2]\\n\"\n    ~\"Added inferior 2\\n\"\n    ^done\n    (gdb)\n    set inferior-tty /a\n    \u0026\"set inferior-tty /a\\n\"\n    \u003dcmd-param-changed,param\u003d\"inferior-tty\",value\u003d\"/a\"\n    ^done\n    (gdb)\n    inferior 2\n    \u0026\"inferior 2\\n\"\n    ~\"[Switching to inferior 2 [\u003cnull\u003e] (\u003cnoexec\u003e)]\\n\"\n    ^done\n    (gdb)\n    set inferior-tty /b\n    \u0026\"set inferior-tty /b\\n\"\n    \u003dcmd-param-changed,param\u003d\"inferior-tty\",value\u003d\"/b\"\n    ^done\n    (gdb)\n    -gdb-show inferior-tty\n    ^done,value\u003d\"/b\"\n    (gdb)\n    inferior 1\n    \u0026\"inferior 1\\n\"\n    ~\"[Switching to inferior 1 [\u003cnull\u003e] (\u003cnoexec\u003e)]\\n\"\n    ^done\n    (gdb)\n    -gdb-show inferior-tty\n    ^done,value\u003d\"/b\"\n\nThe last `-gdb-show` shows `/b` for inferior 1, we would expect `/a`.\n\n    (gdb) add-inferior\n    [New inferior 2]\n    Added inferior 2\n    (gdb) set inferior-tty /a\n    (gdb) inferior 2\n    [Switching to inferior 2 [\u003cnull\u003e] (\u003cnoexec\u003e)]\n    (gdb) set inferior-tty /b\n    (gdb) python print(gdb.parameter(\u0027inferior-tty\u0027))\n    /b\n    (gdb) inferior 1\n    [Switching to inferior 1 [\u003cnull\u003e] (\u003cnoexec\u003e)]\n    (gdb) python print(gdb.parameter(\u0027inferior-tty\u0027))\n    /b\n\nThe last `gdb.parameter` shows `/b` for inferior 1, we would expect\n`/a`.\n\nThe reason for this is the scratch variable used for the set command.\nParameters (the things conceptually created using add_setshow_*\nfunctions) contain a pointer to a global variable, which is where to\nstore the value when executing the `set` command of the parameter.\nPer-inferior parameters are implemented on top of regular global\nparameters, but in addition specify a \"set\" command that copies the\ncontent of the scratch variable to the current inferior\u0027s structure.\nThe global variable is therefore only used as a scratchpad.\n\nThe CLI show command of the parameter is made to read the value from the\ncurrent inferior\u0027s structure, so it shows the right value, based on the\ncurrent inferior.  MI\u0027s -gdb-show and Python\u0027s gdb.parameter, however,\ntry to be generic, and read the parameter through the global variable\npointer.  For per-inferior parameters, that variable contains the last\nvalue set, not the value for the current inferior.\n\nIn my opinion, this bug can happen because of the bad design of having\nthe scratch variable, it should not be there in the first place (I\npresume that at some point, all parameters were global, and this \"hack\"\nwas added on top of that to get what looked like per-inferior\nparameters).\n\nAdd some versions of some add_setshow functions that take\n\n - a get callback, instead of a pointer to a global variable.  This\n   getter returns the value of the parameter based on the current\n   context.\n - a set callback, which accepts the computed value as a parameter,\n   instead of having to get it from a global variable.\n - a show callback, which receives the value to show as a parameter.\n   The show callback could fetch the value itself (for example, from the\n   current inferior, in the case of inferior-tty), but since we already\n   have a dedicated get callback, I think it\u0027s better to keep the \"how\n   to get the value\" knowledge in a single place.  The core code gets\n   the value using the get callback and passes it to the show callback.\n\nNote that just like before, the show callback is only used for the CLI.\nPython and MI previously obtained the value by reading the global\nvariable.  For commands implemented using these new add_setshow\nfunctions, Python and MI now get the value using the get callback.\n\nConceptually, all this is to separate the \"get the value\" and \"show the\nvalue\" parts of show commands.\n\nThe get/set/show callbacks are stored in the cmd_list_element object.\nThe cmd_list_element::function::{show,set}_cmd fields are used when the\ncmd_list_element\u0027s type is {show,set}_cmd.  Because I want the callback\nfunctions to be adequately typed, based on the parameter type, the\nget/set/show callbacks are stored in unions.  For now, these new\nadd_setshow functions are only available for parameters that are\nstrings, so there are only callbacks that deal with strings.  If, in the\nfuture, we want to do the same for parameters that are integers, we will\nbe able to add additional members in get_func/show_func/set_func.\n\nChange-Id: I5529632c4f6505ec6cab696ab825aa2cb88567cf\n","web_links":[{"name":"gitweb","tooltip":"Open in GitWeb","url":"/gitweb?p\u003dbinutils-gdb.git;a\u003dcommit;h\u003d8ae6f0b4beeb2024b71c2a0021bf814ac8a642cc"}],"resolve_conflicts_web_links":[{"name":"gitweb","tooltip":"Open in GitWeb","url":"/gitweb?p\u003dbinutils-gdb.git;a\u003dcommit;h\u003d8ae6f0b4beeb2024b71c2a0021bf814ac8a642cc"}]},"branch":"refs/heads/master"},"546e6bd1a5627a50eaa187ff48138045f3ab9d7b":{"kind":"REWORK","_number":26,"created":"2021-07-11 02:56:26.000000000","uploader":{"_account_id":1000001,"name":"Simon Marchi","email":"simon.marchi@efficios.com","username":"simark","avatars":[{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d120","height":120}]},"ref":"refs/changes/31/5831/26","fetch":{"anonymous http":{"url":"https://review.lttng.org/binutils-gdb","ref":"refs/changes/31/5831/26","commands":{"Branch":"git fetch https://review.lttng.org/binutils-gdb refs/changes/31/5831/26 \u0026\u0026 git checkout -b change-5831 FETCH_HEAD","Checkout":"git fetch https://review.lttng.org/binutils-gdb refs/changes/31/5831/26 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://review.lttng.org/binutils-gdb refs/changes/31/5831/26 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://review.lttng.org/binutils-gdb refs/changes/31/5831/26 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://review.lttng.org/binutils-gdb refs/changes/31/5831/26","Reset To":"git fetch https://review.lttng.org/binutils-gdb refs/changes/31/5831/26 \u0026\u0026 git reset --hard FETCH_HEAD"}}},"commit":{"parents":[{"commit":"00f74517ef820732b1e8d95e27b1f17ea74bf4dc","subject":"gdb: c++-ify ARM disassembler options initialization","web_links":[{"name":"gitweb","tooltip":"Open in GitWeb","url":"/gitweb?p\u003dbinutils-gdb.git;a\u003dcommit;h\u003d00f74517ef820732b1e8d95e27b1f17ea74bf4dc"}]}],"author":{"name":"Simon Marchi","email":"simon.marchi@polymtl.ca","date":"2021-07-09 00:21:23.000000000","tz":-240},"committer":{"name":"Simon Marchi","email":"simon.marchi@polymtl.ca","date":"2021-07-11 02:56:15.000000000","tz":-240},"subject":"gdb: fix getting per-inferior parameter through MI and Python","message":"gdb: fix getting per-inferior parameter through MI and Python\n\nParameters that are per-inferior are not printed correctly when accessed\nthrough MI or Python.  For example, the `show inferior-tty` value\ndepends on the currently selected inferior:\n\n    (gdb)\n    add-inferior\n    \u0026\"add-inferior\\n\"\n    \u003dthread-group-added,id\u003d\"i2\"\n    ~\"[New inferior 2]\\n\"\n    ~\"Added inferior 2\\n\"\n    ^done\n    (gdb)\n    set inferior-tty /a\n    \u0026\"set inferior-tty /a\\n\"\n    \u003dcmd-param-changed,param\u003d\"inferior-tty\",value\u003d\"/a\"\n    ^done\n    (gdb)\n    inferior 2\n    \u0026\"inferior 2\\n\"\n    ~\"[Switching to inferior 2 [\u003cnull\u003e] (\u003cnoexec\u003e)]\\n\"\n    ^done\n    (gdb)\n    set inferior-tty /b\n    \u0026\"set inferior-tty /b\\n\"\n    \u003dcmd-param-changed,param\u003d\"inferior-tty\",value\u003d\"/b\"\n    ^done\n    (gdb)\n    -gdb-show inferior-tty\n    ^done,value\u003d\"/b\"\n    (gdb)\n    inferior 1\n    \u0026\"inferior 1\\n\"\n    ~\"[Switching to inferior 1 [\u003cnull\u003e] (\u003cnoexec\u003e)]\\n\"\n    ^done\n    (gdb)\n    -gdb-show inferior-tty\n    ^done,value\u003d\"/b\"\n\nThe last `-gdb-show` shows `/b` for inferior 1, we would expect `/a`.\n\n    (gdb) add-inferior\n    [New inferior 2]\n    Added inferior 2\n    (gdb) set inferior-tty /a\n    (gdb) inferior 2\n    [Switching to inferior 2 [\u003cnull\u003e] (\u003cnoexec\u003e)]\n    (gdb) set inferior-tty /b\n    (gdb) python print(gdb.parameter(\u0027inferior-tty\u0027))\n    /b\n    (gdb) inferior 1\n    [Switching to inferior 1 [\u003cnull\u003e] (\u003cnoexec\u003e)]\n    (gdb) python print(gdb.parameter(\u0027inferior-tty\u0027))\n    /b\n\nThe last `gdb.parameter` shows `/b` for inferior 1, we would expect\n`/a`.\n\nThe reason for this is the scratch variable used for the set command.\nParameters (the things conceptually created using add_setshow_*\nfunctions) contain a pointer to a global variable, which is where to\nstore the value when executing the `set` command of the parameter.\nPer-inferior parameters are implemented on top of regular global\nparameters, but in addition specify a \"set\" command that copies the\ncontent of the scratch variable to the current inferior\u0027s structure.\nThe global variable is therefore only used as a scratchpad.\n\nThe CLI show command of the parameter is made to read the value from the\ncurrent inferior\u0027s structure, so it shows the right value, based on the\ncurrent inferior.  MI\u0027s -gdb-show and Python\u0027s gdb.parameter, however,\ntry to be generic, and read the parameter through the global variable\npointer.  For per-inferior parameters, that variable contains the last\nvalue set, not the value for the current inferior.\n\nIn my opinion, this bug can happen because of the bad design of having\nthe scratch variable, it should not be there in the first place (I\npresume that at some point, all parameters were global, and this \"hack\"\nwas added on top of that to get what looked like per-inferior\nparameters).\n\nAdd some versions of some add_setshow functions that take\n\n - a get callback, instead of a pointer to a global variable.  This\n   getter returns the value of the parameter based on the current\n   context.\n - a set callback, which accepts the computed value as a parameter,\n   instead of having to get it from a global variable.\n - a show callback, which receives the value to show as a parameter.\n   The show callback could fetch the value itself (for example, from the\n   current inferior, in the case of inferior-tty), but since we already\n   have a dedicated get callback, I think it\u0027s better to keep the \"how\n   to get the value\" knowledge in a single place.  The core code gets\n   the value using the get callback and passes it to the show callback.\n\nNote that just like before, the show callback is only used for the CLI.\nPython and MI previously obtained the value by reading the global\nvariable.  For commands implemented using these new add_setshow\nfunctions, Python and MI now get the value using the get callback.\n\nConceptually, all this is to separate the \"get the value\" and \"show the\nvalue\" parts of show commands.\n\nThe get/set/show callbacks are stored in the cmd_list_element object.\nThe cmd_list_element::function::{show,set}_cmd fields are used when the\ncmd_list_element\u0027s type is {show,set}_cmd.  Because I want the callback\nfunctions to be adequately typed, based on the parameter type, the\nget/set/show callbacks are stored in unions.  For now, these new\nadd_setshow functions are only available for parameters that are\nstrings, so there are only callbacks that deal with strings.  If, in the\nfuture, we want to do the same for parameters that are integers, we will\nbe able to add additional members in get_func/show_func/set_func.\n\nChange-Id: I5529632c4f6505ec6cab696ab825aa2cb88567cf\n","web_links":[{"name":"gitweb","tooltip":"Open in GitWeb","url":"/gitweb?p\u003dbinutils-gdb.git;a\u003dcommit;h\u003d546e6bd1a5627a50eaa187ff48138045f3ab9d7b"}],"resolve_conflicts_web_links":[{"name":"gitweb","tooltip":"Open in GitWeb","url":"/gitweb?p\u003dbinutils-gdb.git;a\u003dcommit;h\u003d546e6bd1a5627a50eaa187ff48138045f3ab9d7b"}]},"branch":"refs/heads/master"},"654a72e21952884b45f71c5157f0735bba1505dd":{"kind":"TRIVIAL_REBASE","_number":27,"created":"2021-07-12 00:17:22.000000000","uploader":{"_account_id":1000001,"name":"Simon Marchi","email":"simon.marchi@efficios.com","username":"simark","avatars":[{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d120","height":120}]},"ref":"refs/changes/31/5831/27","fetch":{"anonymous http":{"url":"https://review.lttng.org/binutils-gdb","ref":"refs/changes/31/5831/27","commands":{"Branch":"git fetch https://review.lttng.org/binutils-gdb refs/changes/31/5831/27 \u0026\u0026 git checkout -b change-5831 FETCH_HEAD","Checkout":"git fetch https://review.lttng.org/binutils-gdb refs/changes/31/5831/27 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://review.lttng.org/binutils-gdb refs/changes/31/5831/27 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://review.lttng.org/binutils-gdb refs/changes/31/5831/27 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://review.lttng.org/binutils-gdb refs/changes/31/5831/27","Reset To":"git fetch https://review.lttng.org/binutils-gdb refs/changes/31/5831/27 \u0026\u0026 git reset --hard FETCH_HEAD"}}},"commit":{"parents":[{"commit":"dfab9dd58e8ccc1dcb2a8cc2f8f1b1d57580a5c5","subject":"gdb: c++-ify ARM disassembler options initialization","web_links":[{"name":"gitweb","tooltip":"Open in GitWeb","url":"/gitweb?p\u003dbinutils-gdb.git;a\u003dcommit;h\u003ddfab9dd58e8ccc1dcb2a8cc2f8f1b1d57580a5c5"}]}],"author":{"name":"Simon Marchi","email":"simon.marchi@polymtl.ca","date":"2021-07-09 00:21:23.000000000","tz":-240},"committer":{"name":"Simon Marchi","email":"simon.marchi@polymtl.ca","date":"2021-07-12 00:17:08.000000000","tz":-240},"subject":"gdb: fix getting per-inferior parameter through MI and Python","message":"gdb: fix getting per-inferior parameter through MI and Python\n\nParameters that are per-inferior are not printed correctly when accessed\nthrough MI or Python.  For example, the `show inferior-tty` value\ndepends on the currently selected inferior:\n\n    (gdb)\n    add-inferior\n    \u0026\"add-inferior\\n\"\n    \u003dthread-group-added,id\u003d\"i2\"\n    ~\"[New inferior 2]\\n\"\n    ~\"Added inferior 2\\n\"\n    ^done\n    (gdb)\n    set inferior-tty /a\n    \u0026\"set inferior-tty /a\\n\"\n    \u003dcmd-param-changed,param\u003d\"inferior-tty\",value\u003d\"/a\"\n    ^done\n    (gdb)\n    inferior 2\n    \u0026\"inferior 2\\n\"\n    ~\"[Switching to inferior 2 [\u003cnull\u003e] (\u003cnoexec\u003e)]\\n\"\n    ^done\n    (gdb)\n    set inferior-tty /b\n    \u0026\"set inferior-tty /b\\n\"\n    \u003dcmd-param-changed,param\u003d\"inferior-tty\",value\u003d\"/b\"\n    ^done\n    (gdb)\n    -gdb-show inferior-tty\n    ^done,value\u003d\"/b\"\n    (gdb)\n    inferior 1\n    \u0026\"inferior 1\\n\"\n    ~\"[Switching to inferior 1 [\u003cnull\u003e] (\u003cnoexec\u003e)]\\n\"\n    ^done\n    (gdb)\n    -gdb-show inferior-tty\n    ^done,value\u003d\"/b\"\n\nThe last `-gdb-show` shows `/b` for inferior 1, we would expect `/a`.\n\n    (gdb) add-inferior\n    [New inferior 2]\n    Added inferior 2\n    (gdb) set inferior-tty /a\n    (gdb) inferior 2\n    [Switching to inferior 2 [\u003cnull\u003e] (\u003cnoexec\u003e)]\n    (gdb) set inferior-tty /b\n    (gdb) python print(gdb.parameter(\u0027inferior-tty\u0027))\n    /b\n    (gdb) inferior 1\n    [Switching to inferior 1 [\u003cnull\u003e] (\u003cnoexec\u003e)]\n    (gdb) python print(gdb.parameter(\u0027inferior-tty\u0027))\n    /b\n\nThe last `gdb.parameter` shows `/b` for inferior 1, we would expect\n`/a`.\n\nThe reason for this is the scratch variable used for the set command.\nParameters (the things conceptually created using add_setshow_*\nfunctions) contain a pointer to a global variable, which is where to\nstore the value when executing the `set` command of the parameter.\nPer-inferior parameters are implemented on top of regular global\nparameters, but in addition specify a \"set\" command that copies the\ncontent of the scratch variable to the current inferior\u0027s structure.\nThe global variable is therefore only used as a scratchpad.\n\nThe CLI show command of the parameter is made to read the value from the\ncurrent inferior\u0027s structure, so it shows the right value, based on the\ncurrent inferior.  MI\u0027s -gdb-show and Python\u0027s gdb.parameter, however,\ntry to be generic, and read the parameter through the global variable\npointer.  For per-inferior parameters, that variable contains the last\nvalue set, not the value for the current inferior.\n\nIn my opinion, this bug can happen because of the bad design of having\nthe scratch variable, it should not be there in the first place (I\npresume that at some point, all parameters were global, and this \"hack\"\nwas added on top of that to get what looked like per-inferior\nparameters).\n\nAdd some versions of some add_setshow functions that take\n\n - a get callback, instead of a pointer to a global variable.  This\n   getter returns the value of the parameter based on the current\n   context.\n - a set callback, which accepts the computed value as a parameter,\n   instead of having to get it from a global variable.\n - a show callback, which receives the value to show as a parameter.\n   The show callback could fetch the value itself (for example, from the\n   current inferior, in the case of inferior-tty), but since we already\n   have a dedicated get callback, I think it\u0027s better to keep the \"how\n   to get the value\" knowledge in a single place.  The core code gets\n   the value using the get callback and passes it to the show callback.\n\nNote that just like before, the show callback is only used for the CLI.\nPython and MI previously obtained the value by reading the global\nvariable.  For commands implemented using these new add_setshow\nfunctions, Python and MI now get the value using the get callback.\n\nConceptually, all this is to separate the \"get the value\" and \"show the\nvalue\" parts of show commands.\n\nThe get/set/show callbacks are stored in the cmd_list_element object.\nThe cmd_list_element::function::{show,set}_cmd fields are used when the\ncmd_list_element\u0027s type is {show,set}_cmd.  Because I want the callback\nfunctions to be adequately typed, based on the parameter type, the\nget/set/show callbacks are stored in unions.  For now, these new\nadd_setshow functions are only available for parameters that are\nstrings, so there are only callbacks that deal with strings.  If, in the\nfuture, we want to do the same for parameters that are integers, we will\nbe able to add additional members in get_func/show_func/set_func.\n\nChange-Id: I5529632c4f6505ec6cab696ab825aa2cb88567cf\n","web_links":[{"name":"gitweb","tooltip":"Open in GitWeb","url":"/gitweb?p\u003dbinutils-gdb.git;a\u003dcommit;h\u003d654a72e21952884b45f71c5157f0735bba1505dd"}],"resolve_conflicts_web_links":[{"name":"gitweb","tooltip":"Open in GitWeb","url":"/gitweb?p\u003dbinutils-gdb.git;a\u003dcommit;h\u003d654a72e21952884b45f71c5157f0735bba1505dd"}]},"branch":"refs/heads/master"},"7079f2fa88e0d20f68d05f8bce8c2b978b3f078a":{"kind":"TRIVIAL_REBASE","_number":28,"created":"2021-07-12 21:57:37.000000000","uploader":{"_account_id":1000001,"name":"Simon Marchi","email":"simon.marchi@efficios.com","username":"simark","avatars":[{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d120","height":120}]},"ref":"refs/changes/31/5831/28","fetch":{"anonymous http":{"url":"https://review.lttng.org/binutils-gdb","ref":"refs/changes/31/5831/28","commands":{"Branch":"git fetch https://review.lttng.org/binutils-gdb refs/changes/31/5831/28 \u0026\u0026 git checkout -b change-5831 FETCH_HEAD","Checkout":"git fetch https://review.lttng.org/binutils-gdb refs/changes/31/5831/28 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://review.lttng.org/binutils-gdb refs/changes/31/5831/28 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://review.lttng.org/binutils-gdb refs/changes/31/5831/28 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://review.lttng.org/binutils-gdb refs/changes/31/5831/28","Reset To":"git fetch https://review.lttng.org/binutils-gdb refs/changes/31/5831/28 \u0026\u0026 git reset --hard FETCH_HEAD"}}},"commit":{"parents":[{"commit":"d58ee5d45542b9b5316667fe57bfa88cf8d1c8bf","subject":"gdb: c++-ify ARM disassembler options initialization","web_links":[{"name":"gitweb","tooltip":"Open in GitWeb","url":"/gitweb?p\u003dbinutils-gdb.git;a\u003dcommit;h\u003dd58ee5d45542b9b5316667fe57bfa88cf8d1c8bf"}]}],"author":{"name":"Simon Marchi","email":"simon.marchi@polymtl.ca","date":"2021-07-09 00:21:23.000000000","tz":-240},"committer":{"name":"Simon Marchi","email":"simon.marchi@efficios.com","date":"2021-07-12 21:57:30.000000000","tz":-240},"subject":"gdb: fix getting per-inferior parameter through MI and Python","message":"gdb: fix getting per-inferior parameter through MI and Python\n\nParameters that are per-inferior are not printed correctly when accessed\nthrough MI or Python.  For example, the `show inferior-tty` value\ndepends on the currently selected inferior:\n\n    (gdb)\n    add-inferior\n    \u0026\"add-inferior\\n\"\n    \u003dthread-group-added,id\u003d\"i2\"\n    ~\"[New inferior 2]\\n\"\n    ~\"Added inferior 2\\n\"\n    ^done\n    (gdb)\n    set inferior-tty /a\n    \u0026\"set inferior-tty /a\\n\"\n    \u003dcmd-param-changed,param\u003d\"inferior-tty\",value\u003d\"/a\"\n    ^done\n    (gdb)\n    inferior 2\n    \u0026\"inferior 2\\n\"\n    ~\"[Switching to inferior 2 [\u003cnull\u003e] (\u003cnoexec\u003e)]\\n\"\n    ^done\n    (gdb)\n    set inferior-tty /b\n    \u0026\"set inferior-tty /b\\n\"\n    \u003dcmd-param-changed,param\u003d\"inferior-tty\",value\u003d\"/b\"\n    ^done\n    (gdb)\n    -gdb-show inferior-tty\n    ^done,value\u003d\"/b\"\n    (gdb)\n    inferior 1\n    \u0026\"inferior 1\\n\"\n    ~\"[Switching to inferior 1 [\u003cnull\u003e] (\u003cnoexec\u003e)]\\n\"\n    ^done\n    (gdb)\n    -gdb-show inferior-tty\n    ^done,value\u003d\"/b\"\n\nThe last `-gdb-show` shows `/b` for inferior 1, we would expect `/a`.\n\n    (gdb) add-inferior\n    [New inferior 2]\n    Added inferior 2\n    (gdb) set inferior-tty /a\n    (gdb) inferior 2\n    [Switching to inferior 2 [\u003cnull\u003e] (\u003cnoexec\u003e)]\n    (gdb) set inferior-tty /b\n    (gdb) python print(gdb.parameter(\u0027inferior-tty\u0027))\n    /b\n    (gdb) inferior 1\n    [Switching to inferior 1 [\u003cnull\u003e] (\u003cnoexec\u003e)]\n    (gdb) python print(gdb.parameter(\u0027inferior-tty\u0027))\n    /b\n\nThe last `gdb.parameter` shows `/b` for inferior 1, we would expect\n`/a`.\n\nThe reason for this is the scratch variable used for the set command.\nParameters (the things conceptually created using add_setshow_*\nfunctions) contain a pointer to a global variable, which is where to\nstore the value when executing the `set` command of the parameter.\nPer-inferior parameters are implemented on top of regular global\nparameters, but in addition specify a \"set\" command that copies the\ncontent of the scratch variable to the current inferior\u0027s structure.\nThe global variable is therefore only used as a scratchpad.\n\nThe CLI show command of the parameter is made to read the value from the\ncurrent inferior\u0027s structure, so it shows the right value, based on the\ncurrent inferior.  MI\u0027s -gdb-show and Python\u0027s gdb.parameter, however,\ntry to be generic, and read the parameter through the global variable\npointer.  For per-inferior parameters, that variable contains the last\nvalue set, not the value for the current inferior.\n\nIn my opinion, this bug can happen because of the bad design of having\nthe scratch variable, it should not be there in the first place (I\npresume that at some point, all parameters were global, and this \"hack\"\nwas added on top of that to get what looked like per-inferior\nparameters).\n\nAdd some versions of some add_setshow functions that take\n\n - a get callback, instead of a pointer to a global variable.  This\n   getter returns the value of the parameter based on the current\n   context.\n - a set callback, which accepts the computed value as a parameter,\n   instead of having to get it from a global variable.\n - a show callback, which receives the value to show as a parameter.\n   The show callback could fetch the value itself (for example, from the\n   current inferior, in the case of inferior-tty), but since we already\n   have a dedicated get callback, I think it\u0027s better to keep the \"how\n   to get the value\" knowledge in a single place.  The core code gets\n   the value using the get callback and passes it to the show callback.\n\nNote that just like before, the show callback is only used for the CLI.\nPython and MI previously obtained the value by reading the global\nvariable.  For commands implemented using these new add_setshow\nfunctions, Python and MI now get the value using the get callback.\n\nConceptually, all this is to separate the \"get the value\" and \"show the\nvalue\" parts of show commands.\n\nThe get/set/show callbacks are stored in the cmd_list_element object.\nThe cmd_list_element::function::{show,set}_cmd fields are used when the\ncmd_list_element\u0027s type is {show,set}_cmd.  Because I want the callback\nfunctions to be adequately typed, based on the parameter type, the\nget/set/show callbacks are stored in unions.  For now, these new\nadd_setshow functions are only available for parameters that are\nstrings, so there are only callbacks that deal with strings.  If, in the\nfuture, we want to do the same for parameters that are integers, we will\nbe able to add additional members in get_func/show_func/set_func.\n\nChange-Id: I5529632c4f6505ec6cab696ab825aa2cb88567cf\n","web_links":[{"name":"gitweb","tooltip":"Open in GitWeb","url":"/gitweb?p\u003dbinutils-gdb.git;a\u003dcommit;h\u003d7079f2fa88e0d20f68d05f8bce8c2b978b3f078a"}],"resolve_conflicts_web_links":[{"name":"gitweb","tooltip":"Open in GitWeb","url":"/gitweb?p\u003dbinutils-gdb.git;a\u003dcommit;h\u003d7079f2fa88e0d20f68d05f8bce8c2b978b3f078a"}]},"branch":"refs/heads/master"},"17d4588f454ea935e6afb04c7c20c3be88b2bd5f":{"kind":"TRIVIAL_REBASE","_number":29,"created":"2021-07-13 01:32:06.000000000","uploader":{"_account_id":1000001,"name":"Simon Marchi","email":"simon.marchi@efficios.com","username":"simark","avatars":[{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d120","height":120}]},"ref":"refs/changes/31/5831/29","fetch":{"anonymous http":{"url":"https://review.lttng.org/binutils-gdb","ref":"refs/changes/31/5831/29","commands":{"Branch":"git fetch https://review.lttng.org/binutils-gdb refs/changes/31/5831/29 \u0026\u0026 git checkout -b change-5831 FETCH_HEAD","Checkout":"git fetch https://review.lttng.org/binutils-gdb refs/changes/31/5831/29 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://review.lttng.org/binutils-gdb refs/changes/31/5831/29 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://review.lttng.org/binutils-gdb refs/changes/31/5831/29 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://review.lttng.org/binutils-gdb refs/changes/31/5831/29","Reset To":"git fetch https://review.lttng.org/binutils-gdb refs/changes/31/5831/29 \u0026\u0026 git reset --hard FETCH_HEAD"}}},"commit":{"parents":[{"commit":"184cc546532d2ee21eb3d6053383b24101445a8c","subject":"gdb: c++-ify ARM disassembler options initialization","web_links":[{"name":"gitweb","tooltip":"Open in GitWeb","url":"/gitweb?p\u003dbinutils-gdb.git;a\u003dcommit;h\u003d184cc546532d2ee21eb3d6053383b24101445a8c"}]}],"author":{"name":"Simon Marchi","email":"simon.marchi@polymtl.ca","date":"2021-07-09 00:21:23.000000000","tz":-240},"committer":{"name":"Simon Marchi","email":"simon.marchi@polymtl.ca","date":"2021-07-13 01:32:00.000000000","tz":-240},"subject":"gdb: fix getting per-inferior parameter through MI and Python","message":"gdb: fix getting per-inferior parameter through MI and Python\n\nParameters that are per-inferior are not printed correctly when accessed\nthrough MI or Python.  For example, the `show inferior-tty` value\ndepends on the currently selected inferior:\n\n    (gdb)\n    add-inferior\n    \u0026\"add-inferior\\n\"\n    \u003dthread-group-added,id\u003d\"i2\"\n    ~\"[New inferior 2]\\n\"\n    ~\"Added inferior 2\\n\"\n    ^done\n    (gdb)\n    set inferior-tty /a\n    \u0026\"set inferior-tty /a\\n\"\n    \u003dcmd-param-changed,param\u003d\"inferior-tty\",value\u003d\"/a\"\n    ^done\n    (gdb)\n    inferior 2\n    \u0026\"inferior 2\\n\"\n    ~\"[Switching to inferior 2 [\u003cnull\u003e] (\u003cnoexec\u003e)]\\n\"\n    ^done\n    (gdb)\n    set inferior-tty /b\n    \u0026\"set inferior-tty /b\\n\"\n    \u003dcmd-param-changed,param\u003d\"inferior-tty\",value\u003d\"/b\"\n    ^done\n    (gdb)\n    -gdb-show inferior-tty\n    ^done,value\u003d\"/b\"\n    (gdb)\n    inferior 1\n    \u0026\"inferior 1\\n\"\n    ~\"[Switching to inferior 1 [\u003cnull\u003e] (\u003cnoexec\u003e)]\\n\"\n    ^done\n    (gdb)\n    -gdb-show inferior-tty\n    ^done,value\u003d\"/b\"\n\nThe last `-gdb-show` shows `/b` for inferior 1, we would expect `/a`.\n\n    (gdb) add-inferior\n    [New inferior 2]\n    Added inferior 2\n    (gdb) set inferior-tty /a\n    (gdb) inferior 2\n    [Switching to inferior 2 [\u003cnull\u003e] (\u003cnoexec\u003e)]\n    (gdb) set inferior-tty /b\n    (gdb) python print(gdb.parameter(\u0027inferior-tty\u0027))\n    /b\n    (gdb) inferior 1\n    [Switching to inferior 1 [\u003cnull\u003e] (\u003cnoexec\u003e)]\n    (gdb) python print(gdb.parameter(\u0027inferior-tty\u0027))\n    /b\n\nThe last `gdb.parameter` shows `/b` for inferior 1, we would expect\n`/a`.\n\nThe reason for this is the scratch variable used for the set command.\nParameters (the things conceptually created using add_setshow_*\nfunctions) contain a pointer to a global variable, which is where to\nstore the value when executing the `set` command of the parameter.\nPer-inferior parameters are implemented on top of regular global\nparameters, but in addition specify a \"set\" command that copies the\ncontent of the scratch variable to the current inferior\u0027s structure.\nThe global variable is therefore only used as a scratchpad.\n\nThe CLI show command of the parameter is made to read the value from the\ncurrent inferior\u0027s structure, so it shows the right value, based on the\ncurrent inferior.  MI\u0027s -gdb-show and Python\u0027s gdb.parameter, however,\ntry to be generic, and read the parameter through the global variable\npointer.  For per-inferior parameters, that variable contains the last\nvalue set, not the value for the current inferior.\n\nIn my opinion, this bug can happen because of the bad design of having\nthe scratch variable, it should not be there in the first place (I\npresume that at some point, all parameters were global, and this \"hack\"\nwas added on top of that to get what looked like per-inferior\nparameters).\n\nAdd some versions of some add_setshow functions that take\n\n - a get callback, instead of a pointer to a global variable.  This\n   getter returns the value of the parameter based on the current\n   context.\n - a set callback, which accepts the computed value as a parameter,\n   instead of having to get it from a global variable.\n - a show callback, which receives the value to show as a parameter.\n   The show callback could fetch the value itself (for example, from the\n   current inferior, in the case of inferior-tty), but since we already\n   have a dedicated get callback, I think it\u0027s better to keep the \"how\n   to get the value\" knowledge in a single place.  The core code gets\n   the value using the get callback and passes it to the show callback.\n\nNote that just like before, the show callback is only used for the CLI.\nPython and MI previously obtained the value by reading the global\nvariable.  For commands implemented using these new add_setshow\nfunctions, Python and MI now get the value using the get callback.\n\nConceptually, all this is to separate the \"get the value\" and \"show the\nvalue\" parts of show commands.\n\nThe get/set/show callbacks are stored in the cmd_list_element object.\nThe cmd_list_element::function::{show,set}_cmd fields are used when the\ncmd_list_element\u0027s type is {show,set}_cmd.  Because I want the callback\nfunctions to be adequately typed, based on the parameter type, the\nget/set/show callbacks are stored in unions.  For now, these new\nadd_setshow functions are only available for parameters that are\nstrings, so there are only callbacks that deal with strings.  If, in the\nfuture, we want to do the same for parameters that are integers, we will\nbe able to add additional members in get_func/show_func/set_func.\n\nChange-Id: I5529632c4f6505ec6cab696ab825aa2cb88567cf\n","web_links":[{"name":"gitweb","tooltip":"Open in GitWeb","url":"/gitweb?p\u003dbinutils-gdb.git;a\u003dcommit;h\u003d17d4588f454ea935e6afb04c7c20c3be88b2bd5f"}],"resolve_conflicts_web_links":[{"name":"gitweb","tooltip":"Open in GitWeb","url":"/gitweb?p\u003dbinutils-gdb.git;a\u003dcommit;h\u003d17d4588f454ea935e6afb04c7c20c3be88b2bd5f"}]},"branch":"refs/heads/master"},"4512fa6fe02620fa5e09b6197143a7c02849c0e8":{"kind":"TRIVIAL_REBASE","_number":30,"created":"2021-07-13 02:13:36.000000000","uploader":{"_account_id":1000001,"name":"Simon Marchi","email":"simon.marchi@efficios.com","username":"simark","avatars":[{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d120","height":120}]},"ref":"refs/changes/31/5831/30","fetch":{"anonymous http":{"url":"https://review.lttng.org/binutils-gdb","ref":"refs/changes/31/5831/30","commands":{"Branch":"git fetch https://review.lttng.org/binutils-gdb refs/changes/31/5831/30 \u0026\u0026 git checkout -b change-5831 FETCH_HEAD","Checkout":"git fetch https://review.lttng.org/binutils-gdb refs/changes/31/5831/30 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://review.lttng.org/binutils-gdb refs/changes/31/5831/30 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://review.lttng.org/binutils-gdb refs/changes/31/5831/30 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://review.lttng.org/binutils-gdb refs/changes/31/5831/30","Reset To":"git fetch https://review.lttng.org/binutils-gdb refs/changes/31/5831/30 \u0026\u0026 git reset --hard FETCH_HEAD"}}},"commit":{"parents":[{"commit":"9dcdd2daeedba3a239a4e01c9257c80e60ac8d0f","subject":"gdb: c++-ify ARM disassembler options initialization","web_links":[{"name":"gitweb","tooltip":"Open in GitWeb","url":"/gitweb?p\u003dbinutils-gdb.git;a\u003dcommit;h\u003d9dcdd2daeedba3a239a4e01c9257c80e60ac8d0f"}]}],"author":{"name":"Simon Marchi","email":"simon.marchi@polymtl.ca","date":"2021-07-09 00:21:23.000000000","tz":-240},"committer":{"name":"Simon Marchi","email":"simon.marchi@polymtl.ca","date":"2021-07-13 02:08:15.000000000","tz":-240},"subject":"gdb: fix getting per-inferior parameter through MI and Python","message":"gdb: fix getting per-inferior parameter through MI and Python\n\nParameters that are per-inferior are not printed correctly when accessed\nthrough MI or Python.  For example, the `show inferior-tty` value\ndepends on the currently selected inferior:\n\n    (gdb)\n    add-inferior\n    \u0026\"add-inferior\\n\"\n    \u003dthread-group-added,id\u003d\"i2\"\n    ~\"[New inferior 2]\\n\"\n    ~\"Added inferior 2\\n\"\n    ^done\n    (gdb)\n    set inferior-tty /a\n    \u0026\"set inferior-tty /a\\n\"\n    \u003dcmd-param-changed,param\u003d\"inferior-tty\",value\u003d\"/a\"\n    ^done\n    (gdb)\n    inferior 2\n    \u0026\"inferior 2\\n\"\n    ~\"[Switching to inferior 2 [\u003cnull\u003e] (\u003cnoexec\u003e)]\\n\"\n    ^done\n    (gdb)\n    set inferior-tty /b\n    \u0026\"set inferior-tty /b\\n\"\n    \u003dcmd-param-changed,param\u003d\"inferior-tty\",value\u003d\"/b\"\n    ^done\n    (gdb)\n    -gdb-show inferior-tty\n    ^done,value\u003d\"/b\"\n    (gdb)\n    inferior 1\n    \u0026\"inferior 1\\n\"\n    ~\"[Switching to inferior 1 [\u003cnull\u003e] (\u003cnoexec\u003e)]\\n\"\n    ^done\n    (gdb)\n    -gdb-show inferior-tty\n    ^done,value\u003d\"/b\"\n\nThe last `-gdb-show` shows `/b` for inferior 1, we would expect `/a`.\n\n    (gdb) add-inferior\n    [New inferior 2]\n    Added inferior 2\n    (gdb) set inferior-tty /a\n    (gdb) inferior 2\n    [Switching to inferior 2 [\u003cnull\u003e] (\u003cnoexec\u003e)]\n    (gdb) set inferior-tty /b\n    (gdb) python print(gdb.parameter(\u0027inferior-tty\u0027))\n    /b\n    (gdb) inferior 1\n    [Switching to inferior 1 [\u003cnull\u003e] (\u003cnoexec\u003e)]\n    (gdb) python print(gdb.parameter(\u0027inferior-tty\u0027))\n    /b\n\nThe last `gdb.parameter` shows `/b` for inferior 1, we would expect\n`/a`.\n\nThe reason for this is the scratch variable used for the set command.\nParameters (the things conceptually created using add_setshow_*\nfunctions) contain a pointer to a global variable, which is where to\nstore the value when executing the `set` command of the parameter.\nPer-inferior parameters are implemented on top of regular global\nparameters, but in addition specify a \"set\" command that copies the\ncontent of the scratch variable to the current inferior\u0027s structure.\nThe global variable is therefore only used as a scratchpad.\n\nThe CLI show command of the parameter is made to read the value from the\ncurrent inferior\u0027s structure, so it shows the right value, based on the\ncurrent inferior.  MI\u0027s -gdb-show and Python\u0027s gdb.parameter, however,\ntry to be generic, and read the parameter through the global variable\npointer.  For per-inferior parameters, that variable contains the last\nvalue set, not the value for the current inferior.\n\nIn my opinion, this bug can happen because of the bad design of having\nthe scratch variable, it should not be there in the first place (I\npresume that at some point, all parameters were global, and this \"hack\"\nwas added on top of that to get what looked like per-inferior\nparameters).\n\nAdd some versions of some add_setshow functions that take\n\n - a get callback, instead of a pointer to a global variable.  This\n   getter returns the value of the parameter based on the current\n   context.\n - a set callback, which accepts the computed value as a parameter,\n   instead of having to get it from a global variable.\n - a show callback, which receives the value to show as a parameter.\n   The show callback could fetch the value itself (for example, from the\n   current inferior, in the case of inferior-tty), but since we already\n   have a dedicated get callback, I think it\u0027s better to keep the \"how\n   to get the value\" knowledge in a single place.  The core code gets\n   the value using the get callback and passes it to the show callback.\n\nNote that just like before, the show callback is only used for the CLI.\nPython and MI previously obtained the value by reading the global\nvariable.  For commands implemented using these new add_setshow\nfunctions, Python and MI now get the value using the get callback.\n\nConceptually, all this is to separate the \"get the value\" and \"show the\nvalue\" parts of show commands.\n\nThe get/set/show callbacks are stored in the cmd_list_element object.\nThe cmd_list_element::function::{show,set}_cmd fields are used when the\ncmd_list_element\u0027s type is {show,set}_cmd.  Because I want the callback\nfunctions to be adequately typed, based on the parameter type, the\nget/set/show callbacks are stored in unions.  For now, these new\nadd_setshow functions are only available for parameters that are\nstrings, so there are only callbacks that deal with strings.  If, in the\nfuture, we want to do the same for parameters that are integers, we will\nbe able to add additional members in get_func/show_func/set_func.\n\nChange-Id: I5529632c4f6505ec6cab696ab825aa2cb88567cf\n","web_links":[{"name":"gitweb","tooltip":"Open in GitWeb","url":"/gitweb?p\u003dbinutils-gdb.git;a\u003dcommit;h\u003d4512fa6fe02620fa5e09b6197143a7c02849c0e8"}],"resolve_conflicts_web_links":[{"name":"gitweb","tooltip":"Open in GitWeb","url":"/gitweb?p\u003dbinutils-gdb.git;a\u003dcommit;h\u003d4512fa6fe02620fa5e09b6197143a7c02849c0e8"}]},"branch":"refs/heads/master"},"4567aabd10733300d195e18d98546a147a32bf91":{"kind":"TRIVIAL_REBASE","_number":31,"created":"2021-07-13 15:04:29.000000000","uploader":{"_account_id":1000001,"name":"Simon Marchi","email":"simon.marchi@efficios.com","username":"simark","avatars":[{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d120","height":120}]},"ref":"refs/changes/31/5831/31","fetch":{"anonymous http":{"url":"https://review.lttng.org/binutils-gdb","ref":"refs/changes/31/5831/31","commands":{"Branch":"git fetch https://review.lttng.org/binutils-gdb refs/changes/31/5831/31 \u0026\u0026 git checkout -b change-5831 FETCH_HEAD","Checkout":"git fetch https://review.lttng.org/binutils-gdb refs/changes/31/5831/31 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://review.lttng.org/binutils-gdb refs/changes/31/5831/31 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://review.lttng.org/binutils-gdb refs/changes/31/5831/31 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://review.lttng.org/binutils-gdb refs/changes/31/5831/31","Reset To":"git fetch https://review.lttng.org/binutils-gdb refs/changes/31/5831/31 \u0026\u0026 git reset --hard FETCH_HEAD"}}},"commit":{"parents":[{"commit":"e82420d1ea9f38a5b1cc64ce5a8ec99c396fa50c","subject":"gdb: c++-ify ARM disassembler options initialization","web_links":[{"name":"gitweb","tooltip":"Open in GitWeb","url":"/gitweb?p\u003dbinutils-gdb.git;a\u003dcommit;h\u003de82420d1ea9f38a5b1cc64ce5a8ec99c396fa50c"}]}],"author":{"name":"Simon Marchi","email":"simon.marchi@polymtl.ca","date":"2021-07-09 00:21:23.000000000","tz":-240},"committer":{"name":"Simon Marchi","email":"simon.marchi@polymtl.ca","date":"2021-07-13 15:04:19.000000000","tz":-240},"subject":"gdb: fix getting per-inferior parameter through MI and Python","message":"gdb: fix getting per-inferior parameter through MI and Python\n\nParameters that are per-inferior are not printed correctly when accessed\nthrough MI or Python.  For example, the `show inferior-tty` value\ndepends on the currently selected inferior:\n\n    (gdb)\n    add-inferior\n    \u0026\"add-inferior\\n\"\n    \u003dthread-group-added,id\u003d\"i2\"\n    ~\"[New inferior 2]\\n\"\n    ~\"Added inferior 2\\n\"\n    ^done\n    (gdb)\n    set inferior-tty /a\n    \u0026\"set inferior-tty /a\\n\"\n    \u003dcmd-param-changed,param\u003d\"inferior-tty\",value\u003d\"/a\"\n    ^done\n    (gdb)\n    inferior 2\n    \u0026\"inferior 2\\n\"\n    ~\"[Switching to inferior 2 [\u003cnull\u003e] (\u003cnoexec\u003e)]\\n\"\n    ^done\n    (gdb)\n    set inferior-tty /b\n    \u0026\"set inferior-tty /b\\n\"\n    \u003dcmd-param-changed,param\u003d\"inferior-tty\",value\u003d\"/b\"\n    ^done\n    (gdb)\n    -gdb-show inferior-tty\n    ^done,value\u003d\"/b\"\n    (gdb)\n    inferior 1\n    \u0026\"inferior 1\\n\"\n    ~\"[Switching to inferior 1 [\u003cnull\u003e] (\u003cnoexec\u003e)]\\n\"\n    ^done\n    (gdb)\n    -gdb-show inferior-tty\n    ^done,value\u003d\"/b\"\n\nThe last `-gdb-show` shows `/b` for inferior 1, we would expect `/a`.\n\n    (gdb) add-inferior\n    [New inferior 2]\n    Added inferior 2\n    (gdb) set inferior-tty /a\n    (gdb) inferior 2\n    [Switching to inferior 2 [\u003cnull\u003e] (\u003cnoexec\u003e)]\n    (gdb) set inferior-tty /b\n    (gdb) python print(gdb.parameter(\u0027inferior-tty\u0027))\n    /b\n    (gdb) inferior 1\n    [Switching to inferior 1 [\u003cnull\u003e] (\u003cnoexec\u003e)]\n    (gdb) python print(gdb.parameter(\u0027inferior-tty\u0027))\n    /b\n\nThe last `gdb.parameter` shows `/b` for inferior 1, we would expect\n`/a`.\n\nThe reason for this is the scratch variable used for the set command.\nParameters (the things conceptually created using add_setshow_*\nfunctions) contain a pointer to a global variable, which is where to\nstore the value when executing the `set` command of the parameter.\nPer-inferior parameters are implemented on top of regular global\nparameters, but in addition specify a \"set\" command that copies the\ncontent of the scratch variable to the current inferior\u0027s structure.\nThe global variable is therefore only used as a scratchpad.\n\nThe CLI show command of the parameter is made to read the value from the\ncurrent inferior\u0027s structure, so it shows the right value, based on the\ncurrent inferior.  MI\u0027s -gdb-show and Python\u0027s gdb.parameter, however,\ntry to be generic, and read the parameter through the global variable\npointer.  For per-inferior parameters, that variable contains the last\nvalue set, not the value for the current inferior.\n\nIn my opinion, this bug can happen because of the bad design of having\nthe scratch variable, it should not be there in the first place (I\npresume that at some point, all parameters were global, and this \"hack\"\nwas added on top of that to get what looked like per-inferior\nparameters).\n\nAdd some versions of some add_setshow functions that take\n\n - a get callback, instead of a pointer to a global variable.  This\n   getter returns the value of the parameter based on the current\n   context.\n - a set callback, which accepts the computed value as a parameter,\n   instead of having to get it from a global variable.\n - a show callback, which receives the value to show as a parameter.\n   The show callback could fetch the value itself (for example, from the\n   current inferior, in the case of inferior-tty), but since we already\n   have a dedicated get callback, I think it\u0027s better to keep the \"how\n   to get the value\" knowledge in a single place.  The core code gets\n   the value using the get callback and passes it to the show callback.\n\nNote that just like before, the show callback is only used for the CLI.\nPython and MI previously obtained the value by reading the global\nvariable.  For commands implemented using these new add_setshow\nfunctions, Python and MI now get the value using the get callback.\n\nConceptually, all this is to separate the \"get the value\" and \"show the\nvalue\" parts of show commands.\n\nThe get/set/show callbacks are stored in the cmd_list_element object.\nThe cmd_list_element::function::{show,set}_cmd fields are used when the\ncmd_list_element\u0027s type is {show,set}_cmd.  Because I want the callback\nfunctions to be adequately typed, based on the parameter type, the\nget/set/show callbacks are stored in unions.  For now, these new\nadd_setshow functions are only available for parameters that are\nstrings, so there are only callbacks that deal with strings.  If, in the\nfuture, we want to do the same for parameters that are integers, we will\nbe able to add additional members in get_func/show_func/set_func.\n\nChange-Id: I5529632c4f6505ec6cab696ab825aa2cb88567cf\n","web_links":[{"name":"gitweb","tooltip":"Open in GitWeb","url":"/gitweb?p\u003dbinutils-gdb.git;a\u003dcommit;h\u003d4567aabd10733300d195e18d98546a147a32bf91"}],"resolve_conflicts_web_links":[{"name":"gitweb","tooltip":"Open in GitWeb","url":"/gitweb?p\u003dbinutils-gdb.git;a\u003dcommit;h\u003d4567aabd10733300d195e18d98546a147a32bf91"}]},"branch":"refs/heads/master"},"735b957737490861f39acb527f2b230ec9a3a0ed":{"kind":"TRIVIAL_REBASE","_number":32,"created":"2021-07-13 19:15:25.000000000","uploader":{"_account_id":1000001,"name":"Simon Marchi","email":"simon.marchi@efficios.com","username":"simark","avatars":[{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d120","height":120}]},"ref":"refs/changes/31/5831/32","fetch":{"anonymous http":{"url":"https://review.lttng.org/binutils-gdb","ref":"refs/changes/31/5831/32","commands":{"Branch":"git fetch https://review.lttng.org/binutils-gdb refs/changes/31/5831/32 \u0026\u0026 git checkout -b change-5831 FETCH_HEAD","Checkout":"git fetch https://review.lttng.org/binutils-gdb refs/changes/31/5831/32 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://review.lttng.org/binutils-gdb refs/changes/31/5831/32 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://review.lttng.org/binutils-gdb refs/changes/31/5831/32 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://review.lttng.org/binutils-gdb refs/changes/31/5831/32","Reset To":"git fetch https://review.lttng.org/binutils-gdb refs/changes/31/5831/32 \u0026\u0026 git reset --hard FETCH_HEAD"}}},"commit":{"parents":[{"commit":"bb75e41c157bb21e68093166d23b61320be749a2","subject":"gdb: c++-ify ARM disassembler options initialization","web_links":[{"name":"gitweb","tooltip":"Open in GitWeb","url":"/gitweb?p\u003dbinutils-gdb.git;a\u003dcommit;h\u003dbb75e41c157bb21e68093166d23b61320be749a2"}]}],"author":{"name":"Simon Marchi","email":"simon.marchi@polymtl.ca","date":"2021-07-09 00:21:23.000000000","tz":-240},"committer":{"name":"Simon Marchi","email":"simon.marchi@polymtl.ca","date":"2021-07-13 19:15:16.000000000","tz":-240},"subject":"gdb: fix getting per-inferior parameter through MI and Python","message":"gdb: fix getting per-inferior parameter through MI and Python\n\nParameters that are per-inferior are not printed correctly when accessed\nthrough MI or Python.  For example, the `show inferior-tty` value\ndepends on the currently selected inferior:\n\n    (gdb)\n    add-inferior\n    \u0026\"add-inferior\\n\"\n    \u003dthread-group-added,id\u003d\"i2\"\n    ~\"[New inferior 2]\\n\"\n    ~\"Added inferior 2\\n\"\n    ^done\n    (gdb)\n    set inferior-tty /a\n    \u0026\"set inferior-tty /a\\n\"\n    \u003dcmd-param-changed,param\u003d\"inferior-tty\",value\u003d\"/a\"\n    ^done\n    (gdb)\n    inferior 2\n    \u0026\"inferior 2\\n\"\n    ~\"[Switching to inferior 2 [\u003cnull\u003e] (\u003cnoexec\u003e)]\\n\"\n    ^done\n    (gdb)\n    set inferior-tty /b\n    \u0026\"set inferior-tty /b\\n\"\n    \u003dcmd-param-changed,param\u003d\"inferior-tty\",value\u003d\"/b\"\n    ^done\n    (gdb)\n    -gdb-show inferior-tty\n    ^done,value\u003d\"/b\"\n    (gdb)\n    inferior 1\n    \u0026\"inferior 1\\n\"\n    ~\"[Switching to inferior 1 [\u003cnull\u003e] (\u003cnoexec\u003e)]\\n\"\n    ^done\n    (gdb)\n    -gdb-show inferior-tty\n    ^done,value\u003d\"/b\"\n\nThe last `-gdb-show` shows `/b` for inferior 1, we would expect `/a`.\n\n    (gdb) add-inferior\n    [New inferior 2]\n    Added inferior 2\n    (gdb) set inferior-tty /a\n    (gdb) inferior 2\n    [Switching to inferior 2 [\u003cnull\u003e] (\u003cnoexec\u003e)]\n    (gdb) set inferior-tty /b\n    (gdb) python print(gdb.parameter(\u0027inferior-tty\u0027))\n    /b\n    (gdb) inferior 1\n    [Switching to inferior 1 [\u003cnull\u003e] (\u003cnoexec\u003e)]\n    (gdb) python print(gdb.parameter(\u0027inferior-tty\u0027))\n    /b\n\nThe last `gdb.parameter` shows `/b` for inferior 1, we would expect\n`/a`.\n\nThe reason for this is the scratch variable used for the set command.\nParameters (the things conceptually created using add_setshow_*\nfunctions) contain a pointer to a global variable, which is where to\nstore the value when executing the `set` command of the parameter.\nPer-inferior parameters are implemented on top of regular global\nparameters, but in addition specify a \"set\" command that copies the\ncontent of the scratch variable to the current inferior\u0027s structure.\nThe global variable is therefore only used as a scratchpad.\n\nThe CLI show command of the parameter is made to read the value from the\ncurrent inferior\u0027s structure, so it shows the right value, based on the\ncurrent inferior.  MI\u0027s -gdb-show and Python\u0027s gdb.parameter, however,\ntry to be generic, and read the parameter through the global variable\npointer.  For per-inferior parameters, that variable contains the last\nvalue set, not the value for the current inferior.\n\nIn my opinion, this bug can happen because of the bad design of having\nthe scratch variable, it should not be there in the first place (I\npresume that at some point, all parameters were global, and this \"hack\"\nwas added on top of that to get what looked like per-inferior\nparameters).\n\nAdd some versions of some add_setshow functions that take\n\n - a get callback, instead of a pointer to a global variable.  This\n   getter returns the value of the parameter based on the current\n   context.\n - a set callback, which accepts the computed value as a parameter,\n   instead of having to get it from a global variable.\n - a show callback, which receives the value to show as a parameter.\n   The show callback could fetch the value itself (for example, from the\n   current inferior, in the case of inferior-tty), but since we already\n   have a dedicated get callback, I think it\u0027s better to keep the \"how\n   to get the value\" knowledge in a single place.  The core code gets\n   the value using the get callback and passes it to the show callback.\n\nNote that just like before, the show callback is only used for the CLI.\nPython and MI previously obtained the value by reading the global\nvariable.  For commands implemented using these new add_setshow\nfunctions, Python and MI now get the value using the get callback.\n\nConceptually, all this is to separate the \"get the value\" and \"show the\nvalue\" parts of show commands.\n\nThe get/set/show callbacks are stored in the cmd_list_element object.\nThe cmd_list_element::function::{show,set}_cmd fields are used when the\ncmd_list_element\u0027s type is {show,set}_cmd.  Because I want the callback\nfunctions to be adequately typed, based on the parameter type, the\nget/set/show callbacks are stored in unions.  For now, these new\nadd_setshow functions are only available for parameters that are\nstrings, so there are only callbacks that deal with strings.  If, in the\nfuture, we want to do the same for parameters that are integers, we will\nbe able to add additional members in get_func/show_func/set_func.\n\nChange-Id: I5529632c4f6505ec6cab696ab825aa2cb88567cf\n","web_links":[{"name":"gitweb","tooltip":"Open in GitWeb","url":"/gitweb?p\u003dbinutils-gdb.git;a\u003dcommit;h\u003d735b957737490861f39acb527f2b230ec9a3a0ed"}],"resolve_conflicts_web_links":[{"name":"gitweb","tooltip":"Open in GitWeb","url":"/gitweb?p\u003dbinutils-gdb.git;a\u003dcommit;h\u003d735b957737490861f39acb527f2b230ec9a3a0ed"}]},"branch":"refs/heads/master"},"6eefddfc537afb0d16dfc92e5545bd8641f8cdbf":{"kind":"TRIVIAL_REBASE","_number":33,"created":"2021-07-13 19:50:26.000000000","uploader":{"_account_id":1000001,"name":"Simon Marchi","email":"simon.marchi@efficios.com","username":"simark","avatars":[{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d120","height":120}]},"ref":"refs/changes/31/5831/33","fetch":{"anonymous http":{"url":"https://review.lttng.org/binutils-gdb","ref":"refs/changes/31/5831/33","commands":{"Branch":"git fetch https://review.lttng.org/binutils-gdb refs/changes/31/5831/33 \u0026\u0026 git checkout -b change-5831 FETCH_HEAD","Checkout":"git fetch https://review.lttng.org/binutils-gdb refs/changes/31/5831/33 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://review.lttng.org/binutils-gdb refs/changes/31/5831/33 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://review.lttng.org/binutils-gdb refs/changes/31/5831/33 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://review.lttng.org/binutils-gdb refs/changes/31/5831/33","Reset To":"git fetch https://review.lttng.org/binutils-gdb refs/changes/31/5831/33 \u0026\u0026 git reset --hard FETCH_HEAD"}}},"commit":{"parents":[{"commit":"f66cc2e2117e83b5fbc39f34bf68a17843bf5598","subject":"gdb: c++-ify ARM disassembler options initialization","web_links":[{"name":"gitweb","tooltip":"Open in GitWeb","url":"/gitweb?p\u003dbinutils-gdb.git;a\u003dcommit;h\u003df66cc2e2117e83b5fbc39f34bf68a17843bf5598"}]}],"author":{"name":"Simon Marchi","email":"simon.marchi@polymtl.ca","date":"2021-07-09 00:21:23.000000000","tz":-240},"committer":{"name":"Simon Marchi","email":"simon.marchi@polymtl.ca","date":"2021-07-13 19:50:08.000000000","tz":-240},"subject":"gdb: fix getting per-inferior parameter through MI and Python","message":"gdb: fix getting per-inferior parameter through MI and Python\n\nParameters that are per-inferior are not printed correctly when accessed\nthrough MI or Python.  For example, the `show inferior-tty` value\ndepends on the currently selected inferior:\n\n    (gdb)\n    add-inferior\n    \u0026\"add-inferior\\n\"\n    \u003dthread-group-added,id\u003d\"i2\"\n    ~\"[New inferior 2]\\n\"\n    ~\"Added inferior 2\\n\"\n    ^done\n    (gdb)\n    set inferior-tty /a\n    \u0026\"set inferior-tty /a\\n\"\n    \u003dcmd-param-changed,param\u003d\"inferior-tty\",value\u003d\"/a\"\n    ^done\n    (gdb)\n    inferior 2\n    \u0026\"inferior 2\\n\"\n    ~\"[Switching to inferior 2 [\u003cnull\u003e] (\u003cnoexec\u003e)]\\n\"\n    ^done\n    (gdb)\n    set inferior-tty /b\n    \u0026\"set inferior-tty /b\\n\"\n    \u003dcmd-param-changed,param\u003d\"inferior-tty\",value\u003d\"/b\"\n    ^done\n    (gdb)\n    -gdb-show inferior-tty\n    ^done,value\u003d\"/b\"\n    (gdb)\n    inferior 1\n    \u0026\"inferior 1\\n\"\n    ~\"[Switching to inferior 1 [\u003cnull\u003e] (\u003cnoexec\u003e)]\\n\"\n    ^done\n    (gdb)\n    -gdb-show inferior-tty\n    ^done,value\u003d\"/b\"\n\nThe last `-gdb-show` shows `/b` for inferior 1, we would expect `/a`.\n\n    (gdb) add-inferior\n    [New inferior 2]\n    Added inferior 2\n    (gdb) set inferior-tty /a\n    (gdb) inferior 2\n    [Switching to inferior 2 [\u003cnull\u003e] (\u003cnoexec\u003e)]\n    (gdb) set inferior-tty /b\n    (gdb) python print(gdb.parameter(\u0027inferior-tty\u0027))\n    /b\n    (gdb) inferior 1\n    [Switching to inferior 1 [\u003cnull\u003e] (\u003cnoexec\u003e)]\n    (gdb) python print(gdb.parameter(\u0027inferior-tty\u0027))\n    /b\n\nThe last `gdb.parameter` shows `/b` for inferior 1, we would expect\n`/a`.\n\nThe reason for this is the scratch variable used for the set command.\nParameters (the things conceptually created using add_setshow_*\nfunctions) contain a pointer to a global variable, which is where to\nstore the value when executing the `set` command of the parameter.\nPer-inferior parameters are implemented on top of regular global\nparameters, but in addition specify a \"set\" command that copies the\ncontent of the scratch variable to the current inferior\u0027s structure.\nThe global variable is therefore only used as a scratchpad.\n\nThe CLI show command of the parameter is made to read the value from the\ncurrent inferior\u0027s structure, so it shows the right value, based on the\ncurrent inferior.  MI\u0027s -gdb-show and Python\u0027s gdb.parameter, however,\ntry to be generic, and read the parameter through the global variable\npointer.  For per-inferior parameters, that variable contains the last\nvalue set, not the value for the current inferior.\n\nIn my opinion, this bug can happen because of the bad design of having\nthe scratch variable, it should not be there in the first place (I\npresume that at some point, all parameters were global, and this \"hack\"\nwas added on top of that to get what looked like per-inferior\nparameters).\n\nAdd some versions of some add_setshow functions that take\n\n - a get callback, instead of a pointer to a global variable.  This\n   getter returns the value of the parameter based on the current\n   context.\n - a set callback, which accepts the computed value as a parameter,\n   instead of having to get it from a global variable.\n - a show callback, which receives the value to show as a parameter.\n   The show callback could fetch the value itself (for example, from the\n   current inferior, in the case of inferior-tty), but since we already\n   have a dedicated get callback, I think it\u0027s better to keep the \"how\n   to get the value\" knowledge in a single place.  The core code gets\n   the value using the get callback and passes it to the show callback.\n\nNote that just like before, the show callback is only used for the CLI.\nPython and MI previously obtained the value by reading the global\nvariable.  For commands implemented using these new add_setshow\nfunctions, Python and MI now get the value using the get callback.\n\nConceptually, all this is to separate the \"get the value\" and \"show the\nvalue\" parts of show commands.\n\nThe get/set/show callbacks are stored in the cmd_list_element object.\nThe cmd_list_element::function::{show,set}_cmd fields are used when the\ncmd_list_element\u0027s type is {show,set}_cmd.  Because I want the callback\nfunctions to be adequately typed, based on the parameter type, the\nget/set/show callbacks are stored in unions.  For now, these new\nadd_setshow functions are only available for parameters that are\nstrings, so there are only callbacks that deal with strings.  If, in the\nfuture, we want to do the same for parameters that are integers, we will\nbe able to add additional members in get_func/show_func/set_func.\n\nChange-Id: I5529632c4f6505ec6cab696ab825aa2cb88567cf\n","web_links":[{"name":"gitweb","tooltip":"Open in GitWeb","url":"/gitweb?p\u003dbinutils-gdb.git;a\u003dcommit;h\u003d6eefddfc537afb0d16dfc92e5545bd8641f8cdbf"}],"resolve_conflicts_web_links":[{"name":"gitweb","tooltip":"Open in GitWeb","url":"/gitweb?p\u003dbinutils-gdb.git;a\u003dcommit;h\u003d6eefddfc537afb0d16dfc92e5545bd8641f8cdbf"}]},"branch":"refs/heads/master"},"ddc84af8555efcb87c84ed942bd821be2d42d207":{"kind":"REWORK","_number":34,"created":"2021-07-19 21:30:49.000000000","uploader":{"_account_id":1000001,"name":"Simon Marchi","email":"simon.marchi@efficios.com","username":"simark","avatars":[{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d120","height":120}]},"ref":"refs/changes/31/5831/34","fetch":{"anonymous http":{"url":"https://review.lttng.org/binutils-gdb","ref":"refs/changes/31/5831/34","commands":{"Branch":"git fetch https://review.lttng.org/binutils-gdb refs/changes/31/5831/34 \u0026\u0026 git checkout -b change-5831 FETCH_HEAD","Checkout":"git fetch https://review.lttng.org/binutils-gdb refs/changes/31/5831/34 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://review.lttng.org/binutils-gdb refs/changes/31/5831/34 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://review.lttng.org/binutils-gdb refs/changes/31/5831/34 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://review.lttng.org/binutils-gdb refs/changes/31/5831/34","Reset To":"git fetch https://review.lttng.org/binutils-gdb refs/changes/31/5831/34 \u0026\u0026 git reset --hard FETCH_HEAD"}}},"commit":{"parents":[{"commit":"9cf3cc5767e09ccd78949295476fdcf79471f048","subject":"gdb: make string-like set show commands use std::string variable","web_links":[{"name":"gitweb","tooltip":"Open in GitWeb","url":"/gitweb?p\u003dbinutils-gdb.git;a\u003dcommit;h\u003d9cf3cc5767e09ccd78949295476fdcf79471f048"}]}],"author":{"name":"Simon Marchi","email":"simon.marchi@polymtl.ca","date":"2021-07-09 00:21:23.000000000","tz":-240},"committer":{"name":"Simon Marchi","email":"simon.marchi@polymtl.ca","date":"2021-07-19 21:15:07.000000000","tz":-240},"subject":"gdb: fix getting per-inferior parameter through MI and Python","message":"gdb: fix getting per-inferior parameter through MI and Python\n\nParameters that are per-inferior are not printed correctly when accessed\nthrough MI or Python.  For example, the `show inferior-tty` value\ndepends on the currently selected inferior:\n\n    (gdb)\n    add-inferior\n    \u0026\"add-inferior\\n\"\n    \u003dthread-group-added,id\u003d\"i2\"\n    ~\"[New inferior 2]\\n\"\n    ~\"Added inferior 2\\n\"\n    ^done\n    (gdb)\n    set inferior-tty /a\n    \u0026\"set inferior-tty /a\\n\"\n    \u003dcmd-param-changed,param\u003d\"inferior-tty\",value\u003d\"/a\"\n    ^done\n    (gdb)\n    inferior 2\n    \u0026\"inferior 2\\n\"\n    ~\"[Switching to inferior 2 [\u003cnull\u003e] (\u003cnoexec\u003e)]\\n\"\n    ^done\n    (gdb)\n    set inferior-tty /b\n    \u0026\"set inferior-tty /b\\n\"\n    \u003dcmd-param-changed,param\u003d\"inferior-tty\",value\u003d\"/b\"\n    ^done\n    (gdb)\n    -gdb-show inferior-tty\n    ^done,value\u003d\"/b\"\n    (gdb)\n    inferior 1\n    \u0026\"inferior 1\\n\"\n    ~\"[Switching to inferior 1 [\u003cnull\u003e] (\u003cnoexec\u003e)]\\n\"\n    ^done\n    (gdb)\n    -gdb-show inferior-tty\n    ^done,value\u003d\"/b\"\n\nThe last `-gdb-show` shows `/b` for inferior 1, we would expect `/a`.\n\n    (gdb) add-inferior\n    [New inferior 2]\n    Added inferior 2\n    (gdb) set inferior-tty /a\n    (gdb) inferior 2\n    [Switching to inferior 2 [\u003cnull\u003e] (\u003cnoexec\u003e)]\n    (gdb) set inferior-tty /b\n    (gdb) python print(gdb.parameter(\u0027inferior-tty\u0027))\n    /b\n    (gdb) inferior 1\n    [Switching to inferior 1 [\u003cnull\u003e] (\u003cnoexec\u003e)]\n    (gdb) python print(gdb.parameter(\u0027inferior-tty\u0027))\n    /b\n\nThe last `gdb.parameter` shows `/b` for inferior 1, we would expect\n`/a`.\n\nThe reason for this is the scratch variable used for the set command.\nParameters (the things conceptually created using add_setshow_*\nfunctions) contain a pointer to a global variable, which is where to\nstore the value when executing the `set` command of the parameter.\nPer-inferior parameters are implemented on top of regular global\nparameters, but in addition specify a \"set\" command that copies the\ncontent of the scratch variable to the current inferior\u0027s structure.\nThe global variable is therefore only used as a scratchpad.\n\nThe CLI show command of the parameter is made to read the value from the\ncurrent inferior\u0027s structure, so it shows the right value, based on the\ncurrent inferior.  MI\u0027s -gdb-show and Python\u0027s gdb.parameter, however,\ntry to be generic, and read the parameter through the global variable\npointer.  For per-inferior parameters, that variable contains the last\nvalue set, not the value for the current inferior.\n\nIn my opinion, this bug can happen because of the bad design of having\nthe scratch variable, it should not be there in the first place (I\npresume that at some point, all parameters were global, and this \"hack\"\nwas added on top of that to get what looked like per-inferior\nparameters).\n\nAdd some versions of some add_setshow functions that take\n\n - a get callback, instead of a pointer to a global variable.  This\n   getter returns the value of the parameter based on the current\n   context.\n - a set callback, which accepts the computed value as a parameter,\n   instead of having to get it from a global variable.\n - a show callback, which receives the value to show as a parameter.\n   The show callback could fetch the value itself (for example, from the\n   current inferior, in the case of inferior-tty), but since we already\n   have a dedicated get callback, I think it\u0027s better to keep the \"how\n   to get the value\" knowledge in a single place.  The core code gets\n   the value using the get callback and passes it to the show callback.\n\nNote that just like before, the show callback is only used for the CLI.\nPython and MI previously obtained the value by reading the global\nvariable.  For commands implemented using these new add_setshow\nfunctions, Python and MI now get the value using the get callback.\n\nConceptually, all this is to separate the \"get the value\" and \"show the\nvalue\" parts of show commands.\n\nThe get/set/show callbacks are stored in the cmd_list_element object.\nThe cmd_list_element::function::{show,set}_cmd fields are used when the\ncmd_list_element\u0027s type is {show,set}_cmd.  Because I want the callback\nfunctions to be adequately typed, based on the parameter type, the\nget/set/show callbacks are stored in unions.  For now, these new\nadd_setshow functions are only available for parameters that are\nstrings, so there are only callbacks that deal with strings.  If, in the\nfuture, we want to do the same for parameters that are integers, we will\nbe able to add additional members in get_func/show_func/set_func.\n\nChange-Id: I5529632c4f6505ec6cab696ab825aa2cb88567cf\n","web_links":[{"name":"gitweb","tooltip":"Open in GitWeb","url":"/gitweb?p\u003dbinutils-gdb.git;a\u003dcommit;h\u003dddc84af8555efcb87c84ed942bd821be2d42d207"}],"resolve_conflicts_web_links":[{"name":"gitweb","tooltip":"Open in GitWeb","url":"/gitweb?p\u003dbinutils-gdb.git;a\u003dcommit;h\u003dddc84af8555efcb87c84ed942bd821be2d42d207"}]},"branch":"refs/heads/master"},"ac97c00dc702aff7dda2e1f28b655b328a5f448e":{"kind":"TRIVIAL_REBASE","_number":35,"created":"2021-07-20 03:05:16.000000000","uploader":{"_account_id":1000001,"name":"Simon Marchi","email":"simon.marchi@efficios.com","username":"simark","avatars":[{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d120","height":120}]},"ref":"refs/changes/31/5831/35","fetch":{"anonymous http":{"url":"https://review.lttng.org/binutils-gdb","ref":"refs/changes/31/5831/35","commands":{"Branch":"git fetch https://review.lttng.org/binutils-gdb refs/changes/31/5831/35 \u0026\u0026 git checkout -b change-5831 FETCH_HEAD","Checkout":"git fetch https://review.lttng.org/binutils-gdb refs/changes/31/5831/35 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://review.lttng.org/binutils-gdb refs/changes/31/5831/35 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://review.lttng.org/binutils-gdb refs/changes/31/5831/35 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://review.lttng.org/binutils-gdb refs/changes/31/5831/35","Reset To":"git fetch https://review.lttng.org/binutils-gdb refs/changes/31/5831/35 \u0026\u0026 git reset --hard FETCH_HEAD"}}},"commit":{"parents":[{"commit":"ca480d548f3a1c87f02fb7b8b7356ecdf17d607f","subject":"gdb: make string-like set show commands use std::string variable","web_links":[{"name":"gitweb","tooltip":"Open in GitWeb","url":"/gitweb?p\u003dbinutils-gdb.git;a\u003dcommit;h\u003dca480d548f3a1c87f02fb7b8b7356ecdf17d607f"}]}],"author":{"name":"Simon Marchi","email":"simon.marchi@polymtl.ca","date":"2021-07-09 00:21:23.000000000","tz":-240},"committer":{"name":"Simon Marchi","email":"simon.marchi@polymtl.ca","date":"2021-07-20 02:52:25.000000000","tz":-240},"subject":"gdb: fix getting per-inferior parameter through MI and Python","message":"gdb: fix getting per-inferior parameter through MI and Python\n\nParameters that are per-inferior are not printed correctly when accessed\nthrough MI or Python.  For example, the `show inferior-tty` value\ndepends on the currently selected inferior:\n\n    (gdb)\n    add-inferior\n    \u0026\"add-inferior\\n\"\n    \u003dthread-group-added,id\u003d\"i2\"\n    ~\"[New inferior 2]\\n\"\n    ~\"Added inferior 2\\n\"\n    ^done\n    (gdb)\n    set inferior-tty /a\n    \u0026\"set inferior-tty /a\\n\"\n    \u003dcmd-param-changed,param\u003d\"inferior-tty\",value\u003d\"/a\"\n    ^done\n    (gdb)\n    inferior 2\n    \u0026\"inferior 2\\n\"\n    ~\"[Switching to inferior 2 [\u003cnull\u003e] (\u003cnoexec\u003e)]\\n\"\n    ^done\n    (gdb)\n    set inferior-tty /b\n    \u0026\"set inferior-tty /b\\n\"\n    \u003dcmd-param-changed,param\u003d\"inferior-tty\",value\u003d\"/b\"\n    ^done\n    (gdb)\n    -gdb-show inferior-tty\n    ^done,value\u003d\"/b\"\n    (gdb)\n    inferior 1\n    \u0026\"inferior 1\\n\"\n    ~\"[Switching to inferior 1 [\u003cnull\u003e] (\u003cnoexec\u003e)]\\n\"\n    ^done\n    (gdb)\n    -gdb-show inferior-tty\n    ^done,value\u003d\"/b\"\n\nThe last `-gdb-show` shows `/b` for inferior 1, we would expect `/a`.\n\n    (gdb) add-inferior\n    [New inferior 2]\n    Added inferior 2\n    (gdb) set inferior-tty /a\n    (gdb) inferior 2\n    [Switching to inferior 2 [\u003cnull\u003e] (\u003cnoexec\u003e)]\n    (gdb) set inferior-tty /b\n    (gdb) python print(gdb.parameter(\u0027inferior-tty\u0027))\n    /b\n    (gdb) inferior 1\n    [Switching to inferior 1 [\u003cnull\u003e] (\u003cnoexec\u003e)]\n    (gdb) python print(gdb.parameter(\u0027inferior-tty\u0027))\n    /b\n\nThe last `gdb.parameter` shows `/b` for inferior 1, we would expect\n`/a`.\n\nThe reason for this is the scratch variable used for the set command.\nParameters (the things conceptually created using add_setshow_*\nfunctions) contain a pointer to a global variable, which is where to\nstore the value when executing the `set` command of the parameter.\nPer-inferior parameters are implemented on top of regular global\nparameters, but in addition specify a \"set\" command that copies the\ncontent of the scratch variable to the current inferior\u0027s structure.\nThe global variable is therefore only used as a scratchpad.\n\nThe CLI show command of the parameter is made to read the value from the\ncurrent inferior\u0027s structure, so it shows the right value, based on the\ncurrent inferior.  MI\u0027s -gdb-show and Python\u0027s gdb.parameter, however,\ntry to be generic, and read the parameter through the global variable\npointer.  For per-inferior parameters, that variable contains the last\nvalue set, not the value for the current inferior.\n\nIn my opinion, this bug can happen because of the bad design of having\nthe scratch variable, it should not be there in the first place (I\npresume that at some point, all parameters were global, and this \"hack\"\nwas added on top of that to get what looked like per-inferior\nparameters).\n\nAdd some versions of some add_setshow functions that take\n\n - a get callback, instead of a pointer to a global variable.  This\n   getter returns the value of the parameter based on the current\n   context.\n - a set callback, which accepts the computed value as a parameter,\n   instead of having to get it from a global variable.\n - a show callback, which receives the value to show as a parameter.\n   The show callback could fetch the value itself (for example, from the\n   current inferior, in the case of inferior-tty), but since we already\n   have a dedicated get callback, I think it\u0027s better to keep the \"how\n   to get the value\" knowledge in a single place.  The core code gets\n   the value using the get callback and passes it to the show callback.\n\nNote that just like before, the show callback is only used for the CLI.\nPython and MI previously obtained the value by reading the global\nvariable.  For commands implemented using these new add_setshow\nfunctions, Python and MI now get the value using the get callback.\n\nConceptually, all this is to separate the \"get the value\" and \"show the\nvalue\" parts of show commands.\n\nThe get/set/show callbacks are stored in the cmd_list_element object.\nThe cmd_list_element::function::{show,set}_cmd fields are used when the\ncmd_list_element\u0027s type is {show,set}_cmd.  Because I want the callback\nfunctions to be adequately typed, based on the parameter type, the\nget/set/show callbacks are stored in unions.  For now, these new\nadd_setshow functions are only available for parameters that are\nstrings, so there are only callbacks that deal with strings.  If, in the\nfuture, we want to do the same for parameters that are integers, we will\nbe able to add additional members in get_func/show_func/set_func.\n\nChange-Id: I5529632c4f6505ec6cab696ab825aa2cb88567cf\n","web_links":[{"name":"gitweb","tooltip":"Open in GitWeb","url":"/gitweb?p\u003dbinutils-gdb.git;a\u003dcommit;h\u003dac97c00dc702aff7dda2e1f28b655b328a5f448e"}],"resolve_conflicts_web_links":[{"name":"gitweb","tooltip":"Open in GitWeb","url":"/gitweb?p\u003dbinutils-gdb.git;a\u003dcommit;h\u003dac97c00dc702aff7dda2e1f28b655b328a5f448e"}]},"branch":"refs/heads/master"},"6dbefbb140d4d62f7a5485630d03ff87a013638d":{"kind":"REWORK","_number":36,"created":"2021-07-21 02:40:59.000000000","uploader":{"_account_id":1000001,"name":"Simon Marchi","email":"simon.marchi@efficios.com","username":"simark","avatars":[{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d120","height":120}]},"ref":"refs/changes/31/5831/36","fetch":{"anonymous http":{"url":"https://review.lttng.org/binutils-gdb","ref":"refs/changes/31/5831/36","commands":{"Branch":"git fetch https://review.lttng.org/binutils-gdb refs/changes/31/5831/36 \u0026\u0026 git checkout -b change-5831 FETCH_HEAD","Checkout":"git fetch https://review.lttng.org/binutils-gdb refs/changes/31/5831/36 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://review.lttng.org/binutils-gdb refs/changes/31/5831/36 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://review.lttng.org/binutils-gdb refs/changes/31/5831/36 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://review.lttng.org/binutils-gdb refs/changes/31/5831/36","Reset To":"git fetch https://review.lttng.org/binutils-gdb refs/changes/31/5831/36 \u0026\u0026 git reset --hard FETCH_HEAD"}}},"commit":{"parents":[{"commit":"87a8dee046cc840850830633e91a66c8faf2d17f","subject":"gdb: make string-like set show commands use std::string variable","web_links":[{"name":"gitweb","tooltip":"Open in GitWeb","url":"/gitweb?p\u003dbinutils-gdb.git;a\u003dcommit;h\u003d87a8dee046cc840850830633e91a66c8faf2d17f"}]}],"author":{"name":"Simon Marchi","email":"simon.marchi@polymtl.ca","date":"2021-07-09 00:21:23.000000000","tz":-240},"committer":{"name":"Simon Marchi","email":"simon.marchi@polymtl.ca","date":"2021-07-21 02:40:45.000000000","tz":-240},"subject":"gdb: fix getting per-inferior parameter through MI and Python","message":"gdb: fix getting per-inferior parameter through MI and Python\n\nParameters that are per-inferior are not printed correctly when accessed\nthrough MI or Python.  For example, the `show inferior-tty` value\ndepends on the currently selected inferior:\n\n    (gdb)\n    add-inferior\n    \u0026\"add-inferior\\n\"\n    \u003dthread-group-added,id\u003d\"i2\"\n    ~\"[New inferior 2]\\n\"\n    ~\"Added inferior 2\\n\"\n    ^done\n    (gdb)\n    set inferior-tty /a\n    \u0026\"set inferior-tty /a\\n\"\n    \u003dcmd-param-changed,param\u003d\"inferior-tty\",value\u003d\"/a\"\n    ^done\n    (gdb)\n    inferior 2\n    \u0026\"inferior 2\\n\"\n    ~\"[Switching to inferior 2 [\u003cnull\u003e] (\u003cnoexec\u003e)]\\n\"\n    ^done\n    (gdb)\n    set inferior-tty /b\n    \u0026\"set inferior-tty /b\\n\"\n    \u003dcmd-param-changed,param\u003d\"inferior-tty\",value\u003d\"/b\"\n    ^done\n    (gdb)\n    -gdb-show inferior-tty\n    ^done,value\u003d\"/b\"\n    (gdb)\n    inferior 1\n    \u0026\"inferior 1\\n\"\n    ~\"[Switching to inferior 1 [\u003cnull\u003e] (\u003cnoexec\u003e)]\\n\"\n    ^done\n    (gdb)\n    -gdb-show inferior-tty\n    ^done,value\u003d\"/b\"\n\nThe last `-gdb-show` shows `/b` for inferior 1, we would expect `/a`.\n\n    (gdb) add-inferior\n    [New inferior 2]\n    Added inferior 2\n    (gdb) set inferior-tty /a\n    (gdb) inferior 2\n    [Switching to inferior 2 [\u003cnull\u003e] (\u003cnoexec\u003e)]\n    (gdb) set inferior-tty /b\n    (gdb) python print(gdb.parameter(\u0027inferior-tty\u0027))\n    /b\n    (gdb) inferior 1\n    [Switching to inferior 1 [\u003cnull\u003e] (\u003cnoexec\u003e)]\n    (gdb) python print(gdb.parameter(\u0027inferior-tty\u0027))\n    /b\n\nThe last `gdb.parameter` shows `/b` for inferior 1, we would expect\n`/a`.\n\nThe reason for this is the scratch variable used for the set command.\nParameters (the things conceptually created using add_setshow_*\nfunctions) contain a pointer to a global variable, which is where to\nstore the value when executing the `set` command of the parameter.\nPer-inferior parameters are implemented on top of regular global\nparameters, but in addition specify a \"set\" command that copies the\ncontent of the scratch variable to the current inferior\u0027s structure.\nThe global variable is therefore only used as a scratchpad.\n\nThe CLI show command of the parameter is made to read the value from the\ncurrent inferior\u0027s structure, so it shows the right value, based on the\ncurrent inferior.  MI\u0027s -gdb-show and Python\u0027s gdb.parameter, however,\ntry to be generic, and read the parameter through the global variable\npointer.  For per-inferior parameters, that variable contains the last\nvalue set, not the value for the current inferior.\n\nIn my opinion, this bug can happen because of the bad design of having\nthe scratch variable, it should not be there in the first place (I\npresume that at some point, all parameters were global, and this \"hack\"\nwas added on top of that to get what looked like per-inferior\nparameters).\n\nAdd some versions of some add_setshow functions that take\n\n - a get callback, instead of a pointer to a global variable.  This\n   getter returns the value of the parameter based on the current\n   context.\n - a set callback, which accepts the computed value as a parameter,\n   instead of having to get it from a global variable.\n - a show callback, which receives the value to show as a parameter.\n   The show callback could fetch the value itself (for example, from the\n   current inferior, in the case of inferior-tty), but since we already\n   have a dedicated get callback, I think it\u0027s better to keep the \"how\n   to get the value\" knowledge in a single place.  The core code gets\n   the value using the get callback and passes it to the show callback.\n\nNote that just like before, the show callback is only used for the CLI.\nPython and MI previously obtained the value by reading the global\nvariable.  For commands implemented using these new add_setshow\nfunctions, Python and MI now get the value using the get callback.\n\nConceptually, all this is to separate the \"get the value\" and \"show the\nvalue\" parts of show commands.\n\nThe get/set/show callbacks are stored in the cmd_list_element object.\nThe cmd_list_element::function::{show,set}_cmd fields are used when the\ncmd_list_element\u0027s type is {show,set}_cmd.  Because I want the callback\nfunctions to be adequately typed, based on the parameter type, the\nget/set/show callbacks are stored in unions.  For now, these new\nadd_setshow functions are only available for parameters that are\nstrings, so there are only callbacks that deal with strings.  If, in the\nfuture, we want to do the same for parameters that are integers, we will\nbe able to add additional members in get_func/show_func/set_func.\n\nChange-Id: I5529632c4f6505ec6cab696ab825aa2cb88567cf\n","web_links":[{"name":"gitweb","tooltip":"Open in GitWeb","url":"/gitweb?p\u003dbinutils-gdb.git;a\u003dcommit;h\u003d6dbefbb140d4d62f7a5485630d03ff87a013638d"}],"resolve_conflicts_web_links":[{"name":"gitweb","tooltip":"Open in GitWeb","url":"/gitweb?p\u003dbinutils-gdb.git;a\u003dcommit;h\u003d6dbefbb140d4d62f7a5485630d03ff87a013638d"}]},"branch":"refs/heads/master"},"f2c4291b5073b6761ff6aaddaf6bcfbaeab90097":{"kind":"REWORK","_number":37,"created":"2021-07-22 15:28:54.000000000","uploader":{"_account_id":1000001,"name":"Simon Marchi","email":"simon.marchi@efficios.com","username":"simark","avatars":[{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d120","height":120}]},"ref":"refs/changes/31/5831/37","fetch":{"anonymous http":{"url":"https://review.lttng.org/binutils-gdb","ref":"refs/changes/31/5831/37","commands":{"Branch":"git fetch https://review.lttng.org/binutils-gdb refs/changes/31/5831/37 \u0026\u0026 git checkout -b change-5831 FETCH_HEAD","Checkout":"git fetch https://review.lttng.org/binutils-gdb refs/changes/31/5831/37 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://review.lttng.org/binutils-gdb refs/changes/31/5831/37 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://review.lttng.org/binutils-gdb refs/changes/31/5831/37 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://review.lttng.org/binutils-gdb refs/changes/31/5831/37","Reset To":"git fetch https://review.lttng.org/binutils-gdb refs/changes/31/5831/37 \u0026\u0026 git reset --hard FETCH_HEAD"}}},"commit":{"parents":[{"commit":"0a512164df703dbeb0e279c29e1457668301751f","subject":"gdb: make string-like set show commands use std::string variable","web_links":[{"name":"gitweb","tooltip":"Open in GitWeb","url":"/gitweb?p\u003dbinutils-gdb.git;a\u003dcommit;h\u003d0a512164df703dbeb0e279c29e1457668301751f"}]}],"author":{"name":"Simon Marchi","email":"simon.marchi@polymtl.ca","date":"2021-07-09 00:21:23.000000000","tz":-240},"committer":{"name":"Simon Marchi","email":"simon.marchi@polymtl.ca","date":"2021-07-22 15:28:49.000000000","tz":-240},"subject":"gdb: fix getting per-inferior parameter through MI and Python","message":"gdb: fix getting per-inferior parameter through MI and Python\n\nParameters that are per-inferior are not printed correctly when accessed\nthrough MI or Python.  For example, the `show inferior-tty` value\ndepends on the currently selected inferior:\n\n    (gdb)\n    add-inferior\n    \u0026\"add-inferior\\n\"\n    \u003dthread-group-added,id\u003d\"i2\"\n    ~\"[New inferior 2]\\n\"\n    ~\"Added inferior 2\\n\"\n    ^done\n    (gdb)\n    set inferior-tty /a\n    \u0026\"set inferior-tty /a\\n\"\n    \u003dcmd-param-changed,param\u003d\"inferior-tty\",value\u003d\"/a\"\n    ^done\n    (gdb)\n    inferior 2\n    \u0026\"inferior 2\\n\"\n    ~\"[Switching to inferior 2 [\u003cnull\u003e] (\u003cnoexec\u003e)]\\n\"\n    ^done\n    (gdb)\n    set inferior-tty /b\n    \u0026\"set inferior-tty /b\\n\"\n    \u003dcmd-param-changed,param\u003d\"inferior-tty\",value\u003d\"/b\"\n    ^done\n    (gdb)\n    -gdb-show inferior-tty\n    ^done,value\u003d\"/b\"\n    (gdb)\n    inferior 1\n    \u0026\"inferior 1\\n\"\n    ~\"[Switching to inferior 1 [\u003cnull\u003e] (\u003cnoexec\u003e)]\\n\"\n    ^done\n    (gdb)\n    -gdb-show inferior-tty\n    ^done,value\u003d\"/b\"\n\nThe last `-gdb-show` shows `/b` for inferior 1, we would expect `/a`.\n\n    (gdb) add-inferior\n    [New inferior 2]\n    Added inferior 2\n    (gdb) set inferior-tty /a\n    (gdb) inferior 2\n    [Switching to inferior 2 [\u003cnull\u003e] (\u003cnoexec\u003e)]\n    (gdb) set inferior-tty /b\n    (gdb) python print(gdb.parameter(\u0027inferior-tty\u0027))\n    /b\n    (gdb) inferior 1\n    [Switching to inferior 1 [\u003cnull\u003e] (\u003cnoexec\u003e)]\n    (gdb) python print(gdb.parameter(\u0027inferior-tty\u0027))\n    /b\n\nThe last `gdb.parameter` shows `/b` for inferior 1, we would expect\n`/a`.\n\nThe reason for this is the scratch variable used for the set command.\nParameters (the things conceptually created using add_setshow_*\nfunctions) contain a pointer to a global variable, which is where to\nstore the value when executing the `set` command of the parameter.\nPer-inferior parameters are implemented on top of regular global\nparameters, but in addition specify a \"set\" command that copies the\ncontent of the scratch variable to the current inferior\u0027s structure.\nThe global variable is therefore only used as a scratchpad.\n\nThe CLI show command of the parameter is made to read the value from the\ncurrent inferior\u0027s structure, so it shows the right value, based on the\ncurrent inferior.  MI\u0027s -gdb-show and Python\u0027s gdb.parameter, however,\ntry to be generic, and read the parameter through the global variable\npointer.  For per-inferior parameters, that variable contains the last\nvalue set, not the value for the current inferior.\n\nIn my opinion, this bug can happen because of the bad design of having\nthe scratch variable, it should not be there in the first place (I\npresume that at some point, all parameters were global, and this \"hack\"\nwas added on top of that to get what looked like per-inferior\nparameters).\n\nAdd some versions of some add_setshow functions that take\n\n - a get callback, instead of a pointer to a global variable.  This\n   getter returns the value of the parameter based on the current\n   context.\n - a set callback, which accepts the computed value as a parameter,\n   instead of having to get it from a global variable.\n - a show callback, which receives the value to show as a parameter.\n   The show callback could fetch the value itself (for example, from the\n   current inferior, in the case of inferior-tty), but since we already\n   have a dedicated get callback, I think it\u0027s better to keep the \"how\n   to get the value\" knowledge in a single place.  The core code gets\n   the value using the get callback and passes it to the show callback.\n\nNote that just like before, the show callback is only used for the CLI.\nPython and MI previously obtained the value by reading the global\nvariable.  For commands implemented using these new add_setshow\nfunctions, Python and MI now get the value using the get callback.\n\nConceptually, all this is to separate the \"get the value\" and \"show the\nvalue\" parts of show commands.\n\nThe get/set/show callbacks are stored in the cmd_list_element object.\nThe cmd_list_element::function::{show,set}_cmd fields are used when the\ncmd_list_element\u0027s type is {show,set}_cmd.  Because I want the callback\nfunctions to be adequately typed, based on the parameter type, the\nget/set/show callbacks are stored in unions.  For now, these new\nadd_setshow functions are only available for parameters that are\nstrings, so there are only callbacks that deal with strings.  If, in the\nfuture, we want to do the same for parameters that are integers, we will\nbe able to add additional members in get_func/show_func/set_func.\n\nChange-Id: I5529632c4f6505ec6cab696ab825aa2cb88567cf\n","web_links":[{"name":"gitweb","tooltip":"Open in GitWeb","url":"/gitweb?p\u003dbinutils-gdb.git;a\u003dcommit;h\u003df2c4291b5073b6761ff6aaddaf6bcfbaeab90097"}],"resolve_conflicts_web_links":[{"name":"gitweb","tooltip":"Open in GitWeb","url":"/gitweb?p\u003dbinutils-gdb.git;a\u003dcommit;h\u003df2c4291b5073b6761ff6aaddaf6bcfbaeab90097"}]},"branch":"refs/heads/master"},"a9c7f91c2bc094001f0777fc800671d8685b3f57":{"kind":"TRIVIAL_REBASE","_number":38,"created":"2021-07-23 19:50:05.000000000","uploader":{"_account_id":1000001,"name":"Simon Marchi","email":"simon.marchi@efficios.com","username":"simark","avatars":[{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d120","height":120}]},"ref":"refs/changes/31/5831/38","fetch":{"anonymous http":{"url":"https://review.lttng.org/binutils-gdb","ref":"refs/changes/31/5831/38","commands":{"Branch":"git fetch https://review.lttng.org/binutils-gdb refs/changes/31/5831/38 \u0026\u0026 git checkout -b change-5831 FETCH_HEAD","Checkout":"git fetch https://review.lttng.org/binutils-gdb refs/changes/31/5831/38 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://review.lttng.org/binutils-gdb refs/changes/31/5831/38 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://review.lttng.org/binutils-gdb refs/changes/31/5831/38 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://review.lttng.org/binutils-gdb refs/changes/31/5831/38","Reset To":"git fetch https://review.lttng.org/binutils-gdb refs/changes/31/5831/38 \u0026\u0026 git reset --hard FETCH_HEAD"}}},"commit":{"parents":[{"commit":"ae6b52ddcf5ab2fe52381bd5998b29460474601a","subject":"gdb: make string-like set show commands use std::string variable","web_links":[{"name":"gitweb","tooltip":"Open in GitWeb","url":"/gitweb?p\u003dbinutils-gdb.git;a\u003dcommit;h\u003dae6b52ddcf5ab2fe52381bd5998b29460474601a"}]}],"author":{"name":"Simon Marchi","email":"simon.marchi@polymtl.ca","date":"2021-07-09 00:21:23.000000000","tz":-240},"committer":{"name":"Simon Marchi","email":"simon.marchi@polymtl.ca","date":"2021-07-23 19:49:51.000000000","tz":-240},"subject":"gdb: fix getting per-inferior parameter through MI and Python","message":"gdb: fix getting per-inferior parameter through MI and Python\n\nParameters that are per-inferior are not printed correctly when accessed\nthrough MI or Python.  For example, the `show inferior-tty` value\ndepends on the currently selected inferior:\n\n    (gdb)\n    add-inferior\n    \u0026\"add-inferior\\n\"\n    \u003dthread-group-added,id\u003d\"i2\"\n    ~\"[New inferior 2]\\n\"\n    ~\"Added inferior 2\\n\"\n    ^done\n    (gdb)\n    set inferior-tty /a\n    \u0026\"set inferior-tty /a\\n\"\n    \u003dcmd-param-changed,param\u003d\"inferior-tty\",value\u003d\"/a\"\n    ^done\n    (gdb)\n    inferior 2\n    \u0026\"inferior 2\\n\"\n    ~\"[Switching to inferior 2 [\u003cnull\u003e] (\u003cnoexec\u003e)]\\n\"\n    ^done\n    (gdb)\n    set inferior-tty /b\n    \u0026\"set inferior-tty /b\\n\"\n    \u003dcmd-param-changed,param\u003d\"inferior-tty\",value\u003d\"/b\"\n    ^done\n    (gdb)\n    -gdb-show inferior-tty\n    ^done,value\u003d\"/b\"\n    (gdb)\n    inferior 1\n    \u0026\"inferior 1\\n\"\n    ~\"[Switching to inferior 1 [\u003cnull\u003e] (\u003cnoexec\u003e)]\\n\"\n    ^done\n    (gdb)\n    -gdb-show inferior-tty\n    ^done,value\u003d\"/b\"\n\nThe last `-gdb-show` shows `/b` for inferior 1, we would expect `/a`.\n\n    (gdb) add-inferior\n    [New inferior 2]\n    Added inferior 2\n    (gdb) set inferior-tty /a\n    (gdb) inferior 2\n    [Switching to inferior 2 [\u003cnull\u003e] (\u003cnoexec\u003e)]\n    (gdb) set inferior-tty /b\n    (gdb) python print(gdb.parameter(\u0027inferior-tty\u0027))\n    /b\n    (gdb) inferior 1\n    [Switching to inferior 1 [\u003cnull\u003e] (\u003cnoexec\u003e)]\n    (gdb) python print(gdb.parameter(\u0027inferior-tty\u0027))\n    /b\n\nThe last `gdb.parameter` shows `/b` for inferior 1, we would expect\n`/a`.\n\nThe reason for this is the scratch variable used for the set command.\nParameters (the things conceptually created using add_setshow_*\nfunctions) contain a pointer to a global variable, which is where to\nstore the value when executing the `set` command of the parameter.\nPer-inferior parameters are implemented on top of regular global\nparameters, but in addition specify a \"set\" command that copies the\ncontent of the scratch variable to the current inferior\u0027s structure.\nThe global variable is therefore only used as a scratchpad.\n\nThe CLI show command of the parameter is made to read the value from the\ncurrent inferior\u0027s structure, so it shows the right value, based on the\ncurrent inferior.  MI\u0027s -gdb-show and Python\u0027s gdb.parameter, however,\ntry to be generic, and read the parameter through the global variable\npointer.  For per-inferior parameters, that variable contains the last\nvalue set, not the value for the current inferior.\n\nIn my opinion, this bug can happen because of the bad design of having\nthe scratch variable, it should not be there in the first place (I\npresume that at some point, all parameters were global, and this \"hack\"\nwas added on top of that to get what looked like per-inferior\nparameters).\n\nAdd some versions of some add_setshow functions that take\n\n - a get callback, instead of a pointer to a global variable.  This\n   getter returns the value of the parameter based on the current\n   context.\n - a set callback, which accepts the computed value as a parameter,\n   instead of having to get it from a global variable.\n - a show callback, which receives the value to show as a parameter.\n   The show callback could fetch the value itself (for example, from the\n   current inferior, in the case of inferior-tty), but since we already\n   have a dedicated get callback, I think it\u0027s better to keep the \"how\n   to get the value\" knowledge in a single place.  The core code gets\n   the value using the get callback and passes it to the show callback.\n\nNote that just like before, the show callback is only used for the CLI.\nPython and MI previously obtained the value by reading the global\nvariable.  For commands implemented using these new add_setshow\nfunctions, Python and MI now get the value using the get callback.\n\nConceptually, all this is to separate the \"get the value\" and \"show the\nvalue\" parts of show commands.\n\nThe get/set/show callbacks are stored in the cmd_list_element object.\nThe cmd_list_element::function::{show,set}_cmd fields are used when the\ncmd_list_element\u0027s type is {show,set}_cmd.  Because I want the callback\nfunctions to be adequately typed, based on the parameter type, the\nget/set/show callbacks are stored in unions.  For now, these new\nadd_setshow functions are only available for parameters that are\nstrings, so there are only callbacks that deal with strings.  If, in the\nfuture, we want to do the same for parameters that are integers, we will\nbe able to add additional members in get_func/show_func/set_func.\n\nChange-Id: I5529632c4f6505ec6cab696ab825aa2cb88567cf\n","web_links":[{"name":"gitweb","tooltip":"Open in GitWeb","url":"/gitweb?p\u003dbinutils-gdb.git;a\u003dcommit;h\u003da9c7f91c2bc094001f0777fc800671d8685b3f57"}],"resolve_conflicts_web_links":[{"name":"gitweb","tooltip":"Open in GitWeb","url":"/gitweb?p\u003dbinutils-gdb.git;a\u003dcommit;h\u003da9c7f91c2bc094001f0777fc800671d8685b3f57"}]},"branch":"refs/heads/master"},"882be52bf748b0071c3c861c7c788ffdba942f0e":{"kind":"NO_CHANGE","_number":39,"created":"2021-07-23 20:27:03.000000000","uploader":{"_account_id":1000001,"name":"Simon Marchi","email":"simon.marchi@efficios.com","username":"simark","avatars":[{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d120","height":120}]},"ref":"refs/changes/31/5831/39","fetch":{"anonymous http":{"url":"https://review.lttng.org/binutils-gdb","ref":"refs/changes/31/5831/39","commands":{"Branch":"git fetch https://review.lttng.org/binutils-gdb refs/changes/31/5831/39 \u0026\u0026 git checkout -b change-5831 FETCH_HEAD","Checkout":"git fetch https://review.lttng.org/binutils-gdb refs/changes/31/5831/39 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://review.lttng.org/binutils-gdb refs/changes/31/5831/39 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://review.lttng.org/binutils-gdb refs/changes/31/5831/39 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://review.lttng.org/binutils-gdb refs/changes/31/5831/39","Reset To":"git fetch https://review.lttng.org/binutils-gdb refs/changes/31/5831/39 \u0026\u0026 git reset --hard FETCH_HEAD"}}},"commit":{"parents":[{"commit":"ffc81bfa2a111b1db5a6d55916b377ab8d4b4a44","subject":"gdb: make string-like set show commands use std::string variable","web_links":[{"name":"gitweb","tooltip":"Open in GitWeb","url":"/gitweb?p\u003dbinutils-gdb.git;a\u003dcommit;h\u003dffc81bfa2a111b1db5a6d55916b377ab8d4b4a44"}]}],"author":{"name":"Simon Marchi","email":"simon.marchi@polymtl.ca","date":"2021-07-09 00:21:23.000000000","tz":-240},"committer":{"name":"Simon Marchi","email":"simon.marchi@polymtl.ca","date":"2021-07-23 20:26:54.000000000","tz":-240},"subject":"gdb: fix getting per-inferior parameter through MI and Python","message":"gdb: fix getting per-inferior parameter through MI and Python\n\nParameters that are per-inferior are not printed correctly when accessed\nthrough MI or Python.  For example, the `show inferior-tty` value\ndepends on the currently selected inferior:\n\n    (gdb)\n    add-inferior\n    \u0026\"add-inferior\\n\"\n    \u003dthread-group-added,id\u003d\"i2\"\n    ~\"[New inferior 2]\\n\"\n    ~\"Added inferior 2\\n\"\n    ^done\n    (gdb)\n    set inferior-tty /a\n    \u0026\"set inferior-tty /a\\n\"\n    \u003dcmd-param-changed,param\u003d\"inferior-tty\",value\u003d\"/a\"\n    ^done\n    (gdb)\n    inferior 2\n    \u0026\"inferior 2\\n\"\n    ~\"[Switching to inferior 2 [\u003cnull\u003e] (\u003cnoexec\u003e)]\\n\"\n    ^done\n    (gdb)\n    set inferior-tty /b\n    \u0026\"set inferior-tty /b\\n\"\n    \u003dcmd-param-changed,param\u003d\"inferior-tty\",value\u003d\"/b\"\n    ^done\n    (gdb)\n    -gdb-show inferior-tty\n    ^done,value\u003d\"/b\"\n    (gdb)\n    inferior 1\n    \u0026\"inferior 1\\n\"\n    ~\"[Switching to inferior 1 [\u003cnull\u003e] (\u003cnoexec\u003e)]\\n\"\n    ^done\n    (gdb)\n    -gdb-show inferior-tty\n    ^done,value\u003d\"/b\"\n\nThe last `-gdb-show` shows `/b` for inferior 1, we would expect `/a`.\n\n    (gdb) add-inferior\n    [New inferior 2]\n    Added inferior 2\n    (gdb) set inferior-tty /a\n    (gdb) inferior 2\n    [Switching to inferior 2 [\u003cnull\u003e] (\u003cnoexec\u003e)]\n    (gdb) set inferior-tty /b\n    (gdb) python print(gdb.parameter(\u0027inferior-tty\u0027))\n    /b\n    (gdb) inferior 1\n    [Switching to inferior 1 [\u003cnull\u003e] (\u003cnoexec\u003e)]\n    (gdb) python print(gdb.parameter(\u0027inferior-tty\u0027))\n    /b\n\nThe last `gdb.parameter` shows `/b` for inferior 1, we would expect\n`/a`.\n\nThe reason for this is the scratch variable used for the set command.\nParameters (the things conceptually created using add_setshow_*\nfunctions) contain a pointer to a global variable, which is where to\nstore the value when executing the `set` command of the parameter.\nPer-inferior parameters are implemented on top of regular global\nparameters, but in addition specify a \"set\" command that copies the\ncontent of the scratch variable to the current inferior\u0027s structure.\nThe global variable is therefore only used as a scratchpad.\n\nThe CLI show command of the parameter is made to read the value from the\ncurrent inferior\u0027s structure, so it shows the right value, based on the\ncurrent inferior.  MI\u0027s -gdb-show and Python\u0027s gdb.parameter, however,\ntry to be generic, and read the parameter through the global variable\npointer.  For per-inferior parameters, that variable contains the last\nvalue set, not the value for the current inferior.\n\nIn my opinion, this bug can happen because of the bad design of having\nthe scratch variable, it should not be there in the first place (I\npresume that at some point, all parameters were global, and this \"hack\"\nwas added on top of that to get what looked like per-inferior\nparameters).\n\nAdd some versions of some add_setshow functions that take\n\n - a get callback, instead of a pointer to a global variable.  This\n   getter returns the value of the parameter based on the current\n   context.\n - a set callback, which accepts the computed value as a parameter,\n   instead of having to get it from a global variable.\n - a show callback, which receives the value to show as a parameter.\n   The show callback could fetch the value itself (for example, from the\n   current inferior, in the case of inferior-tty), but since we already\n   have a dedicated get callback, I think it\u0027s better to keep the \"how\n   to get the value\" knowledge in a single place.  The core code gets\n   the value using the get callback and passes it to the show callback.\n\nNote that just like before, the show callback is only used for the CLI.\nPython and MI previously obtained the value by reading the global\nvariable.  For commands implemented using these new add_setshow\nfunctions, Python and MI now get the value using the get callback.\n\nConceptually, all this is to separate the \"get the value\" and \"show the\nvalue\" parts of show commands.\n\nThe get/set/show callbacks are stored in the cmd_list_element object.\nThe cmd_list_element::function::{show,set}_cmd fields are used when the\ncmd_list_element\u0027s type is {show,set}_cmd.  Because I want the callback\nfunctions to be adequately typed, based on the parameter type, the\nget/set/show callbacks are stored in unions.  For now, these new\nadd_setshow functions are only available for parameters that are\nstrings, so there are only callbacks that deal with strings.  If, in the\nfuture, we want to do the same for parameters that are integers, we will\nbe able to add additional members in get_func/show_func/set_func.\n\nChange-Id: I5529632c4f6505ec6cab696ab825aa2cb88567cf\n","web_links":[{"name":"gitweb","tooltip":"Open in GitWeb","url":"/gitweb?p\u003dbinutils-gdb.git;a\u003dcommit;h\u003d882be52bf748b0071c3c861c7c788ffdba942f0e"}],"resolve_conflicts_web_links":[{"name":"gitweb","tooltip":"Open in GitWeb","url":"/gitweb?p\u003dbinutils-gdb.git;a\u003dcommit;h\u003d882be52bf748b0071c3c861c7c788ffdba942f0e"}]},"branch":"refs/heads/master"},"442c137b76bba947eb47d1bc214534bac9a0e6a9":{"kind":"REWORK","_number":40,"created":"2021-07-23 21:22:12.000000000","uploader":{"_account_id":1000001,"name":"Simon Marchi","email":"simon.marchi@efficios.com","username":"simark","avatars":[{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d120","height":120}]},"ref":"refs/changes/31/5831/40","fetch":{"anonymous http":{"url":"https://review.lttng.org/binutils-gdb","ref":"refs/changes/31/5831/40","commands":{"Branch":"git fetch https://review.lttng.org/binutils-gdb refs/changes/31/5831/40 \u0026\u0026 git checkout -b change-5831 FETCH_HEAD","Checkout":"git fetch https://review.lttng.org/binutils-gdb refs/changes/31/5831/40 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://review.lttng.org/binutils-gdb refs/changes/31/5831/40 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://review.lttng.org/binutils-gdb refs/changes/31/5831/40 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://review.lttng.org/binutils-gdb refs/changes/31/5831/40","Reset To":"git fetch https://review.lttng.org/binutils-gdb refs/changes/31/5831/40 \u0026\u0026 git reset --hard FETCH_HEAD"}}},"commit":{"parents":[{"commit":"ffc81bfa2a111b1db5a6d55916b377ab8d4b4a44","subject":"gdb: make string-like set show commands use std::string variable","web_links":[{"name":"gitweb","tooltip":"Open in GitWeb","url":"/gitweb?p\u003dbinutils-gdb.git;a\u003dcommit;h\u003dffc81bfa2a111b1db5a6d55916b377ab8d4b4a44"}]}],"author":{"name":"Simon Marchi","email":"simon.marchi@polymtl.ca","date":"2021-07-09 00:21:23.000000000","tz":-240},"committer":{"name":"Simon Marchi","email":"simon.marchi@polymtl.ca","date":"2021-07-23 21:09:53.000000000","tz":-240},"subject":"gdb: fix getting per-inferior parameter through MI and Python","message":"gdb: fix getting per-inferior parameter through MI and Python\n\nParameters that are per-inferior are not printed correctly when accessed\nthrough MI or Python.  For example, the `show inferior-tty` value\ndepends on the currently selected inferior:\n\n    (gdb)\n    add-inferior\n    \u0026\"add-inferior\\n\"\n    \u003dthread-group-added,id\u003d\"i2\"\n    ~\"[New inferior 2]\\n\"\n    ~\"Added inferior 2\\n\"\n    ^done\n    (gdb)\n    set inferior-tty /a\n    \u0026\"set inferior-tty /a\\n\"\n    \u003dcmd-param-changed,param\u003d\"inferior-tty\",value\u003d\"/a\"\n    ^done\n    (gdb)\n    inferior 2\n    \u0026\"inferior 2\\n\"\n    ~\"[Switching to inferior 2 [\u003cnull\u003e] (\u003cnoexec\u003e)]\\n\"\n    ^done\n    (gdb)\n    set inferior-tty /b\n    \u0026\"set inferior-tty /b\\n\"\n    \u003dcmd-param-changed,param\u003d\"inferior-tty\",value\u003d\"/b\"\n    ^done\n    (gdb)\n    -gdb-show inferior-tty\n    ^done,value\u003d\"/b\"\n    (gdb)\n    inferior 1\n    \u0026\"inferior 1\\n\"\n    ~\"[Switching to inferior 1 [\u003cnull\u003e] (\u003cnoexec\u003e)]\\n\"\n    ^done\n    (gdb)\n    -gdb-show inferior-tty\n    ^done,value\u003d\"/b\"\n\nThe last `-gdb-show` shows `/b` for inferior 1, we would expect `/a`.\n\n    (gdb) add-inferior\n    [New inferior 2]\n    Added inferior 2\n    (gdb) set inferior-tty /a\n    (gdb) inferior 2\n    [Switching to inferior 2 [\u003cnull\u003e] (\u003cnoexec\u003e)]\n    (gdb) set inferior-tty /b\n    (gdb) python print(gdb.parameter(\u0027inferior-tty\u0027))\n    /b\n    (gdb) inferior 1\n    [Switching to inferior 1 [\u003cnull\u003e] (\u003cnoexec\u003e)]\n    (gdb) python print(gdb.parameter(\u0027inferior-tty\u0027))\n    /b\n\nThe last `gdb.parameter` shows `/b` for inferior 1, we would expect\n`/a`.\n\nThe reason for this is the scratch variable used for the set command.\nParameters (the things conceptually created using add_setshow_*\nfunctions) contain a pointer to a global variable, which is where to\nstore the value when executing the `set` command of the parameter.\nPer-inferior parameters are implemented on top of regular global\nparameters, but in addition specify a \"set\" command that copies the\ncontent of the scratch variable to the current inferior\u0027s structure.\nThe global variable is therefore only used as a scratchpad.\n\nThe CLI show command of the parameter is made to read the value from the\ncurrent inferior\u0027s structure, so it shows the right value, based on the\ncurrent inferior.  MI\u0027s -gdb-show and Python\u0027s gdb.parameter, however,\ntry to be generic, and read the parameter through the global variable\npointer.  For per-inferior parameters, that variable contains the last\nvalue set, not the value for the current inferior.\n\nIn my opinion, this bug can happen because of the bad design of having\nthe scratch variable, it should not be there in the first place (I\npresume that at some point, all parameters were global, and this \"hack\"\nwas added on top of that to get what looked like per-inferior\nparameters).\n\nAdd some versions of some add_setshow functions that take\n\n - a get callback, instead of a pointer to a global variable.  This\n   getter returns the value of the parameter based on the current\n   context.\n - a set callback, which accepts the computed value as a parameter,\n   instead of having to get it from a global variable.\n - a show callback, which receives the value to show as a parameter.\n   The show callback could fetch the value itself (for example, from the\n   current inferior, in the case of inferior-tty), but since we already\n   have a dedicated get callback, I think it\u0027s better to keep the \"how\n   to get the value\" knowledge in a single place.  The core code gets\n   the value using the get callback and passes it to the show callback.\n\nNote that just like before, the show callback is only used for the CLI.\nPython and MI previously obtained the value by reading the global\nvariable.  For commands implemented using these new add_setshow\nfunctions, Python and MI now get the value using the get callback.\n\nConceptually, all this is to separate the \"get the value\" and \"show the\nvalue\" parts of show commands.\n\nThe get/set/show callbacks are stored in the cmd_list_element object.\nThe cmd_list_element::function::{show,set}_cmd fields are used when the\ncmd_list_element\u0027s type is {show,set}_cmd.  Because I want the callback\nfunctions to be adequately typed, based on the parameter type, the\nget/set/show callbacks are stored in unions.  For now, these new\nadd_setshow functions are only available for parameters that are\nstrings, so there are only callbacks that deal with strings.  If, in the\nfuture, we want to do the same for parameters that are integers, we will\nbe able to add additional members in get_func/show_func/set_func.\n\nSome random notes:\n\n - The show_remote_exec_file function is no longer needed.  It existed\n   in order to show the right value (based on the current inferior) of\n   the remote exec-file, because the value in the global variable wasn\u0027t\n   necessarily the right one.  Now that the setting is defined using a\n   getter and a setter, the generic code does the right thing.  Also,\n   the show_remote_exec_file function showed the value in a very terse\n   way.  Using the generic code, it now looks like:\n\n     The remote pathname for \"run\" is \"foo\".\n\nChange-Id: I5529632c4f6505ec6cab696ab825aa2cb88567cf\n","web_links":[{"name":"gitweb","tooltip":"Open in GitWeb","url":"/gitweb?p\u003dbinutils-gdb.git;a\u003dcommit;h\u003d442c137b76bba947eb47d1bc214534bac9a0e6a9"}],"resolve_conflicts_web_links":[{"name":"gitweb","tooltip":"Open in GitWeb","url":"/gitweb?p\u003dbinutils-gdb.git;a\u003dcommit;h\u003d442c137b76bba947eb47d1bc214534bac9a0e6a9"}]},"branch":"refs/heads/master"},"3c1970f9d24e4de5eaa5498f4b896575ba2d5439":{"kind":"NO_CODE_CHANGE","_number":41,"created":"2021-07-23 21:54:54.000000000","uploader":{"_account_id":1000001,"name":"Simon Marchi","email":"simon.marchi@efficios.com","username":"simark","avatars":[{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d120","height":120}]},"ref":"refs/changes/31/5831/41","fetch":{"anonymous http":{"url":"https://review.lttng.org/binutils-gdb","ref":"refs/changes/31/5831/41","commands":{"Branch":"git fetch https://review.lttng.org/binutils-gdb refs/changes/31/5831/41 \u0026\u0026 git checkout -b change-5831 FETCH_HEAD","Checkout":"git fetch https://review.lttng.org/binutils-gdb refs/changes/31/5831/41 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://review.lttng.org/binutils-gdb refs/changes/31/5831/41 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://review.lttng.org/binutils-gdb refs/changes/31/5831/41 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://review.lttng.org/binutils-gdb refs/changes/31/5831/41","Reset To":"git fetch https://review.lttng.org/binutils-gdb refs/changes/31/5831/41 \u0026\u0026 git reset --hard FETCH_HEAD"}}},"commit":{"parents":[{"commit":"ffc81bfa2a111b1db5a6d55916b377ab8d4b4a44","subject":"gdb: make string-like set show commands use std::string variable","web_links":[{"name":"gitweb","tooltip":"Open in GitWeb","url":"/gitweb?p\u003dbinutils-gdb.git;a\u003dcommit;h\u003dffc81bfa2a111b1db5a6d55916b377ab8d4b4a44"}]}],"author":{"name":"Simon Marchi","email":"simon.marchi@polymtl.ca","date":"2021-07-09 00:21:23.000000000","tz":-240},"committer":{"name":"Simon Marchi","email":"simon.marchi@polymtl.ca","date":"2021-07-23 21:22:29.000000000","tz":-240},"subject":"gdb: fix per-inferior settings through MI/Python/Guile/with command/$_gdb_setting","message":"gdb: fix per-inferior settings through MI/Python/Guile/with command/$_gdb_setting\n\nThe settings whose source of truth is not the global variable registered\nwith the set/show commands may give erroneous values when accessed\nthrough MI, Python, Guild, the \"with\" command and the $_gdb_setting /\n$_gdb_setting_str convenience functions.  The instances of this I know\nof are per-inferior settings, such as \"set inferior-tty\", hence why this\npatch title says \"per-inferior\".\n\nTo give an example, here\u0027s the \"inferior-tty\" value accessed using MI\nand Python, dealing with two inferiors, where the shown value should\ndepend on the selected inferior:\n\n    (gdb)\n    add-inferior\n    \u0026\"add-inferior\\n\"\n    \u003dthread-group-added,id\u003d\"i2\"\n    ~\"[New inferior 2]\\n\"\n    ~\"Added inferior 2\\n\"\n    ^done\n    (gdb)\n    set inferior-tty /a\n    \u0026\"set inferior-tty /a\\n\"\n    \u003dcmd-param-changed,param\u003d\"inferior-tty\",value\u003d\"/a\"\n    ^done\n    (gdb)\n    inferior 2\n    \u0026\"inferior 2\\n\"\n    ~\"[Switching to inferior 2 [\u003cnull\u003e] (\u003cnoexec\u003e)]\\n\"\n    ^done\n    (gdb)\n    set inferior-tty /b\n    \u0026\"set inferior-tty /b\\n\"\n    \u003dcmd-param-changed,param\u003d\"inferior-tty\",value\u003d\"/b\"\n    ^done\n    (gdb)\n    -gdb-show inferior-tty\n    ^done,value\u003d\"/b\"\n    (gdb)\n    inferior 1\n    \u0026\"inferior 1\\n\"\n    ~\"[Switching to inferior 1 [\u003cnull\u003e] (\u003cnoexec\u003e)]\\n\"\n    ^done\n    (gdb)\n    -gdb-show inferior-tty\n    ^done,value\u003d\"/b\"\n\nThe last `-gdb-show` shows `/b` for inferior 1, we would expect `/a`.\n\n    (gdb) add-inferior\n    [New inferior 2]\n    Added inferior 2\n    (gdb) set inferior-tty /a\n    (gdb) inferior 2\n    [Switching to inferior 2 [\u003cnull\u003e] (\u003cnoexec\u003e)]\n    (gdb) set inferior-tty /b\n    (gdb) python print(gdb.parameter(\u0027inferior-tty\u0027))\n    /b\n    (gdb) inferior 1\n    [Switching to inferior 1 [\u003cnull\u003e] (\u003cnoexec\u003e)]\n    (gdb) python print(gdb.parameter(\u0027inferior-tty\u0027))\n    /b\n\nThe last `gdb.parameter` shows `/b` for inferior 1, we would expect\n`/a`.\n\nThe reason for this is the scratch variable used by the set command.\nSettings (the things conceptually created using add_setshow_* functions)\ncontain a pointer to a global variable, where the `set` command store\nthe value when executed. By default, the show command shows the value\nfrom this global variable as well.  Per-inferior settings are\nimplemented on top of regular global settings.  The trick is that they\nspecify a custom \"set\" command callback that copies the content from the\nscratch variable to the current inferior\u0027s structure.  The global\nvariable is therefore only used as a scratchpad between the set command\nand the callback.\n\nThese settings also use custom show callbacks that read the shown value\nfrom the current inferior\u0027s structure, ignoring the value in the scratch\nvariable.  These show functions therefore do the right thing, they show\na value based on the selected inferior.  MI\u0027s -gdb-show and Python\u0027s\ngdb.parameter, however, don\u0027t do that, they read the setting\u0027s value\nthrough the global variable pointer.  For per-inferior parameters, that\nvariable contains the last value set, not the value for the current\ninferior.\n\nIn my opinion, this bug can happen because of the \"bad\" design of having\nthe scratch variable.  I presume that at some point, all parameters were\nglobal, and this \"hack\" was added on top of that to get what looked like\nper-inferior parameters.\n\nI want to fix this in a somewhat nice way and try to evolve the design\nin the right direction.  This patch adds versions of some add_setshow\nfunctions that take a getter and setter callbacks instead of a pointer\nto a global variable.  The getters / setters can get / set the value as\nthey see fit (like, from the current inferior), without the need for a\ntemporary scratch variable.\n\nThe get / set callbacks are stored in the cmd_list_element::function\nunion.  The getter is stored in the show command and the setter in\nstored in the set command.  What determines whether a show or set\ncommand uses the getter / setter callbacks or the global variable\npointer is whether the cmd_list_element::var has a value or not.\n\nThe various places that get / set setting values are updated to account\nfor the fact that some setting types can use either the callbacks or the\nglobal variable pointer.  These places are:\n\n - value_from_setting\n - str_value_from_setting\n - get_setshow_command_value_string\n - do_set_command\n - gdbpy_parameter_value\n\n[note: the guile bindings should be updated as well but aren\u0027t at the\nmoment]\n\nAs of this patch, only a few setting types (auto_boolean, boolean,\nfilename, string_noescape and optional_filename) were updated to allow\nbeing implemented with get / set callbacks.  The other can be updated as\nneeded.\n\nThis patch converts a few per-inferior settings to use this:\n\n - inferior-tty\n - args\n - cwd\n - remote exec-file\n - tdesc filename\n\nIt also converts a few other settings where the \"set\" can fail.  For\nexample, when trying to \"set non-stop\" while the program is running, the\nset is rejected and the setting remains unchanged.  To implement this,\ntwo variables are needed non_stop (the real value) and non_stop_1 (a\nscratch variable), and care must be taken to revert the scratch\nvariable\u0027s value on failure, so that \"show non-stop\" shows the right\nthing.  I think all this becomes more straightforward when using the new\nsystem.  If the setting\u0027s value can\u0027t be changed, the setter just\ndoesn\u0027t write the value, that\u0027s it.  The settings changed like this are:\n\n - non-stop\n\nThe show callbacks (used to print setting values on the CLI in a custom\nway) do not really change.  The only difference is that they can now\ntrust the \"value\" argument they receive, even for per-inferior\nsettings.\n\nThe show_remote_exec_file function is no longer needed.  It existed\nin order to show the right value (based on the current inferior) of\nthe remote exec-file, because the value in the global variable wasn\u0027t\nnecessarily the right one.  Now that the setting is defined using a\ngetter and a setter, the generic code does the right thing.  Also,\nthe show_remote_exec_file function showed the value in a very terse\nway.  Using the generic code, it now looks like:\n\n    The remote pathname for \"run\" is \"foo\".\n\nChange-Id: I5529632c4f6505ec6cab696ab825aa2cb88567cf\n","web_links":[{"name":"gitweb","tooltip":"Open in GitWeb","url":"/gitweb?p\u003dbinutils-gdb.git;a\u003dcommit;h\u003d3c1970f9d24e4de5eaa5498f4b896575ba2d5439"}],"resolve_conflicts_web_links":[{"name":"gitweb","tooltip":"Open in GitWeb","url":"/gitweb?p\u003dbinutils-gdb.git;a\u003dcommit;h\u003d3c1970f9d24e4de5eaa5498f4b896575ba2d5439"}]},"branch":"refs/heads/master"},"cf77588ba4c0457443800fd01b9a6dd30a2d5b22":{"kind":"TRIVIAL_REBASE","_number":42,"created":"2021-07-28 21:09:54.000000000","uploader":{"_account_id":1000001,"name":"Simon Marchi","email":"simon.marchi@efficios.com","username":"simark","avatars":[{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d120","height":120}]},"ref":"refs/changes/31/5831/42","fetch":{"anonymous http":{"url":"https://review.lttng.org/binutils-gdb","ref":"refs/changes/31/5831/42","commands":{"Branch":"git fetch https://review.lttng.org/binutils-gdb refs/changes/31/5831/42 \u0026\u0026 git checkout -b change-5831 FETCH_HEAD","Checkout":"git fetch https://review.lttng.org/binutils-gdb refs/changes/31/5831/42 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://review.lttng.org/binutils-gdb refs/changes/31/5831/42 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://review.lttng.org/binutils-gdb refs/changes/31/5831/42 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://review.lttng.org/binutils-gdb refs/changes/31/5831/42","Reset To":"git fetch https://review.lttng.org/binutils-gdb refs/changes/31/5831/42 \u0026\u0026 git reset --hard FETCH_HEAD"}}},"commit":{"parents":[{"commit":"aa1e663c20b81ea49bc9ec01b8e6064cd4676bde","subject":"gdb: make string-like set show commands use std::string variable","web_links":[{"name":"gitweb","tooltip":"Open in GitWeb","url":"/gitweb?p\u003dbinutils-gdb.git;a\u003dcommit;h\u003daa1e663c20b81ea49bc9ec01b8e6064cd4676bde"}]}],"author":{"name":"Simon Marchi","email":"simon.marchi@polymtl.ca","date":"2021-07-09 00:21:23.000000000","tz":-240},"committer":{"name":"Simon Marchi","email":"simon.marchi@polymtl.ca","date":"2021-07-28 21:09:50.000000000","tz":-240},"subject":"gdb: fix per-inferior settings through MI/Python/Guile/with command/$_gdb_setting","message":"gdb: fix per-inferior settings through MI/Python/Guile/with command/$_gdb_setting\n\nThe settings whose source of truth is not the global variable registered\nwith the set/show commands may give erroneous values when accessed\nthrough MI, Python, Guild, the \"with\" command and the $_gdb_setting /\n$_gdb_setting_str convenience functions.  The instances of this I know\nof are per-inferior settings, such as \"set inferior-tty\", hence why this\npatch title says \"per-inferior\".\n\nTo give an example, here\u0027s the \"inferior-tty\" value accessed using MI\nand Python, dealing with two inferiors, where the shown value should\ndepend on the selected inferior:\n\n    (gdb)\n    add-inferior\n    \u0026\"add-inferior\\n\"\n    \u003dthread-group-added,id\u003d\"i2\"\n    ~\"[New inferior 2]\\n\"\n    ~\"Added inferior 2\\n\"\n    ^done\n    (gdb)\n    set inferior-tty /a\n    \u0026\"set inferior-tty /a\\n\"\n    \u003dcmd-param-changed,param\u003d\"inferior-tty\",value\u003d\"/a\"\n    ^done\n    (gdb)\n    inferior 2\n    \u0026\"inferior 2\\n\"\n    ~\"[Switching to inferior 2 [\u003cnull\u003e] (\u003cnoexec\u003e)]\\n\"\n    ^done\n    (gdb)\n    set inferior-tty /b\n    \u0026\"set inferior-tty /b\\n\"\n    \u003dcmd-param-changed,param\u003d\"inferior-tty\",value\u003d\"/b\"\n    ^done\n    (gdb)\n    -gdb-show inferior-tty\n    ^done,value\u003d\"/b\"\n    (gdb)\n    inferior 1\n    \u0026\"inferior 1\\n\"\n    ~\"[Switching to inferior 1 [\u003cnull\u003e] (\u003cnoexec\u003e)]\\n\"\n    ^done\n    (gdb)\n    -gdb-show inferior-tty\n    ^done,value\u003d\"/b\"\n\nThe last `-gdb-show` shows `/b` for inferior 1, we would expect `/a`.\n\n    (gdb) add-inferior\n    [New inferior 2]\n    Added inferior 2\n    (gdb) set inferior-tty /a\n    (gdb) inferior 2\n    [Switching to inferior 2 [\u003cnull\u003e] (\u003cnoexec\u003e)]\n    (gdb) set inferior-tty /b\n    (gdb) python print(gdb.parameter(\u0027inferior-tty\u0027))\n    /b\n    (gdb) inferior 1\n    [Switching to inferior 1 [\u003cnull\u003e] (\u003cnoexec\u003e)]\n    (gdb) python print(gdb.parameter(\u0027inferior-tty\u0027))\n    /b\n\nThe last `gdb.parameter` shows `/b` for inferior 1, we would expect\n`/a`.\n\nThe reason for this is the scratch variable used by the set command.\nSettings (the things conceptually created using add_setshow_* functions)\ncontain a pointer to a global variable, where the `set` command store\nthe value when executed. By default, the show command shows the value\nfrom this global variable as well.  Per-inferior settings are\nimplemented on top of regular global settings.  The trick is that they\nspecify a custom \"set\" command callback that copies the content from the\nscratch variable to the current inferior\u0027s structure.  The global\nvariable is therefore only used as a scratchpad between the set command\nand the callback.\n\nThese settings also use custom show callbacks that read the shown value\nfrom the current inferior\u0027s structure, ignoring the value in the scratch\nvariable.  These show functions therefore do the right thing, they show\na value based on the selected inferior.  MI\u0027s -gdb-show and Python\u0027s\ngdb.parameter, however, don\u0027t do that, they read the setting\u0027s value\nthrough the global variable pointer.  For per-inferior parameters, that\nvariable contains the last value set, not the value for the current\ninferior.\n\nIn my opinion, this bug can happen because of the \"bad\" design of having\nthe scratch variable.  I presume that at some point, all parameters were\nglobal, and this \"hack\" was added on top of that to get what looked like\nper-inferior parameters.\n\nI want to fix this in a somewhat nice way and try to evolve the design\nin the right direction.  This patch adds versions of some add_setshow\nfunctions that take a getter and setter callbacks instead of a pointer\nto a global variable.  The getters / setters can get / set the value as\nthey see fit (like, from the current inferior), without the need for a\ntemporary scratch variable.\n\nThe get / set callbacks are stored in the cmd_list_element::function\nunion.  The getter is stored in the show command and the setter in\nstored in the set command.  What determines whether a show or set\ncommand uses the getter / setter callbacks or the global variable\npointer is whether the cmd_list_element::var has a value or not.\n\nThe various places that get / set setting values are updated to account\nfor the fact that some setting types can use either the callbacks or the\nglobal variable pointer.  These places are:\n\n - value_from_setting\n - str_value_from_setting\n - get_setshow_command_value_string\n - do_set_command\n - gdbpy_parameter_value\n\n[note: the guile bindings should be updated as well but aren\u0027t at the\nmoment]\n\nAs of this patch, only a few setting types (auto_boolean, boolean,\nfilename, string_noescape and optional_filename) were updated to allow\nbeing implemented with get / set callbacks.  The other can be updated as\nneeded.\n\nThis patch converts a few per-inferior settings to use this:\n\n - inferior-tty\n - args\n - cwd\n - remote exec-file\n - tdesc filename\n\nIt also converts a few other settings where the \"set\" can fail.  For\nexample, when trying to \"set non-stop\" while the program is running, the\nset is rejected and the setting remains unchanged.  To implement this,\ntwo variables are needed non_stop (the real value) and non_stop_1 (a\nscratch variable), and care must be taken to revert the scratch\nvariable\u0027s value on failure, so that \"show non-stop\" shows the right\nthing.  I think all this becomes more straightforward when using the new\nsystem.  If the setting\u0027s value can\u0027t be changed, the setter just\ndoesn\u0027t write the value, that\u0027s it.  The settings changed like this are:\n\n - non-stop\n\nThe show callbacks (used to print setting values on the CLI in a custom\nway) do not really change.  The only difference is that they can now\ntrust the \"value\" argument they receive, even for per-inferior\nsettings.\n\nThe show_remote_exec_file function is no longer needed.  It existed\nin order to show the right value (based on the current inferior) of\nthe remote exec-file, because the value in the global variable wasn\u0027t\nnecessarily the right one.  Now that the setting is defined using a\ngetter and a setter, the generic code does the right thing.  Also,\nthe show_remote_exec_file function showed the value in a very terse\nway.  Using the generic code, it now looks like:\n\n    The remote pathname for \"run\" is \"foo\".\n\nChange-Id: I5529632c4f6505ec6cab696ab825aa2cb88567cf\n","web_links":[{"name":"gitweb","tooltip":"Open in GitWeb","url":"/gitweb?p\u003dbinutils-gdb.git;a\u003dcommit;h\u003dcf77588ba4c0457443800fd01b9a6dd30a2d5b22"}],"resolve_conflicts_web_links":[{"name":"gitweb","tooltip":"Open in GitWeb","url":"/gitweb?p\u003dbinutils-gdb.git;a\u003dcommit;h\u003dcf77588ba4c0457443800fd01b9a6dd30a2d5b22"}]},"branch":"refs/heads/master"},"21a5f9be87b6a9ef2de7640ebed65e4d0e291a58":{"kind":"REWORK","_number":43,"created":"2021-08-10 03:05:17.000000000","uploader":{"_account_id":1000001,"name":"Simon Marchi","email":"simon.marchi@efficios.com","username":"simark","avatars":[{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d120","height":120}]},"ref":"refs/changes/31/5831/43","fetch":{"anonymous http":{"url":"https://review.lttng.org/binutils-gdb","ref":"refs/changes/31/5831/43","commands":{"Branch":"git fetch https://review.lttng.org/binutils-gdb refs/changes/31/5831/43 \u0026\u0026 git checkout -b change-5831 FETCH_HEAD","Checkout":"git fetch https://review.lttng.org/binutils-gdb refs/changes/31/5831/43 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://review.lttng.org/binutils-gdb refs/changes/31/5831/43 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://review.lttng.org/binutils-gdb refs/changes/31/5831/43 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://review.lttng.org/binutils-gdb refs/changes/31/5831/43","Reset To":"git fetch https://review.lttng.org/binutils-gdb refs/changes/31/5831/43 \u0026\u0026 git reset --hard FETCH_HEAD"}}},"commit":{"parents":[{"commit":"2d109ba11501e220f5055000e3c1c8a3becc491b","subject":"gdb: Setting setter return a bool to tell if the value changed","web_links":[{"name":"gitweb","tooltip":"Open in GitWeb","url":"/gitweb?p\u003dbinutils-gdb.git;a\u003dcommit;h\u003d2d109ba11501e220f5055000e3c1c8a3becc491b"}]}],"author":{"name":"Simon Marchi","email":"simon.marchi@polymtl.ca","date":"2021-07-09 00:21:23.000000000","tz":-240},"committer":{"name":"Simon Marchi","email":"simon.marchi@polymtl.ca","date":"2021-08-10 03:05:15.000000000","tz":-240},"subject":"gdb: fix per-inferior settings through MI/Python/Guile/with command/$_gdb_setting","message":"gdb: fix per-inferior settings through MI/Python/Guile/with command/$_gdb_setting\n\nThe settings whose source of truth is not the global variable registered\nwith the set/show commands may give erroneous values when accessed\nthrough MI, Python, Guild, the \"with\" command and the $_gdb_setting /\n$_gdb_setting_str convenience functions.  The instances of this I know\nof are per-inferior settings, such as \"set inferior-tty\", hence why this\npatch title says \"per-inferior\".\n\nTo give an example, here\u0027s the \"inferior-tty\" value accessed using MI\nand Python, dealing with two inferiors, where the shown value should\ndepend on the selected inferior:\n\n    (gdb)\n    add-inferior\n    \u0026\"add-inferior\\n\"\n    \u003dthread-group-added,id\u003d\"i2\"\n    ~\"[New inferior 2]\\n\"\n    ~\"Added inferior 2\\n\"\n    ^done\n    (gdb)\n    set inferior-tty /a\n    \u0026\"set inferior-tty /a\\n\"\n    \u003dcmd-param-changed,param\u003d\"inferior-tty\",value\u003d\"/a\"\n    ^done\n    (gdb)\n    inferior 2\n    \u0026\"inferior 2\\n\"\n    ~\"[Switching to inferior 2 [\u003cnull\u003e] (\u003cnoexec\u003e)]\\n\"\n    ^done\n    (gdb)\n    set inferior-tty /b\n    \u0026\"set inferior-tty /b\\n\"\n    \u003dcmd-param-changed,param\u003d\"inferior-tty\",value\u003d\"/b\"\n    ^done\n    (gdb)\n    -gdb-show inferior-tty\n    ^done,value\u003d\"/b\"\n    (gdb)\n    inferior 1\n    \u0026\"inferior 1\\n\"\n    ~\"[Switching to inferior 1 [\u003cnull\u003e] (\u003cnoexec\u003e)]\\n\"\n    ^done\n    (gdb)\n    -gdb-show inferior-tty\n    ^done,value\u003d\"/b\"\n\nThe last `-gdb-show` shows `/b` for inferior 1, we would expect `/a`.\n\n    (gdb) add-inferior\n    [New inferior 2]\n    Added inferior 2\n    (gdb) set inferior-tty /a\n    (gdb) inferior 2\n    [Switching to inferior 2 [\u003cnull\u003e] (\u003cnoexec\u003e)]\n    (gdb) set inferior-tty /b\n    (gdb) python print(gdb.parameter(\u0027inferior-tty\u0027))\n    /b\n    (gdb) inferior 1\n    [Switching to inferior 1 [\u003cnull\u003e] (\u003cnoexec\u003e)]\n    (gdb) python print(gdb.parameter(\u0027inferior-tty\u0027))\n    /b\n\nThe last `gdb.parameter` shows `/b` for inferior 1, we would expect\n`/a`.\n\nThe reason for this is the scratch variable used by the set command.\nSettings (the things conceptually created using add_setshow_* functions)\ncontain a pointer to a global variable, where the `set` command store\nthe value when executed. By default, the show command shows the value\nfrom this global variable as well.  Per-inferior settings are\nimplemented on top of regular global settings.  The trick is that they\nspecify a custom \"set\" command callback that copies the content from the\nscratch variable to the current inferior\u0027s structure.  The global\nvariable is therefore only used as a scratchpad between the set command\nand the callback.\n\nThese settings also use custom show callbacks that read the shown value\nfrom the current inferior\u0027s structure, ignoring the value in the scratch\nvariable.  These show functions therefore do the right thing, they show\na value based on the selected inferior.  MI\u0027s -gdb-show and Python\u0027s\ngdb.parameter, however, don\u0027t do that, they read the setting\u0027s value\nthrough the global variable pointer.  For per-inferior parameters, that\nvariable contains the last value set, not the value for the current\ninferior.\n\nIn my opinion, this bug can happen because of the \"bad\" design of having\nthe scratch variable.  I presume that at some point, all parameters were\nglobal, and this \"hack\" was added on top of that to get what looked like\nper-inferior parameters.\n\nI want to fix this in a somewhat nice way and try to evolve the design\nin the right direction.  This patch adds versions of some add_setshow\nfunctions that take a getter and setter callbacks instead of a pointer\nto a global variable.  The getters / setters can get / set the value as\nthey see fit (like, from the current inferior), without the need for a\ntemporary scratch variable.\n\nThe get / set callbacks are stored in the cmd_list_element::function\nunion.  The getter is stored in the show command and the setter in\nstored in the set command.  What determines whether a show or set\ncommand uses the getter / setter callbacks or the global variable\npointer is whether the cmd_list_element::var has a value or not.\n\nThe various places that get / set setting values are updated to account\nfor the fact that some setting types can use either the callbacks or the\nglobal variable pointer.  These places are:\n\n - value_from_setting\n - str_value_from_setting\n - get_setshow_command_value_string\n - do_set_command\n - gdbpy_parameter_value\n\n[note: the guile bindings should be updated as well but aren\u0027t at the\nmoment]\n\nAs of this patch, only a few setting types (auto_boolean, boolean,\nfilename, string_noescape and optional_filename) were updated to allow\nbeing implemented with get / set callbacks.  The other can be updated as\nneeded.\n\nThis patch converts a few per-inferior settings to use this:\n\n - inferior-tty\n - args\n - cwd\n - remote exec-file\n - tdesc filename\n\nIt also converts a few other settings where the \"set\" can fail.  For\nexample, when trying to \"set non-stop\" while the program is running, the\nset is rejected and the setting remains unchanged.  To implement this,\ntwo variables are needed non_stop (the real value) and non_stop_1 (a\nscratch variable), and care must be taken to revert the scratch\nvariable\u0027s value on failure, so that \"show non-stop\" shows the right\nthing.  I think all this becomes more straightforward when using the new\nsystem.  If the setting\u0027s value can\u0027t be changed, the setter just\ndoesn\u0027t write the value, that\u0027s it.  The settings changed like this are:\n\n - non-stop\n\nThe show callbacks (used to print setting values on the CLI in a custom\nway) do not really change.  The only difference is that they can now\ntrust the \"value\" argument they receive, even for per-inferior\nsettings.\n\nThe show_remote_exec_file function is no longer needed.  It existed\nin order to show the right value (based on the current inferior) of\nthe remote exec-file, because the value in the global variable wasn\u0027t\nnecessarily the right one.  Now that the setting is defined using a\ngetter and a setter, the generic code does the right thing.  Also,\nthe show_remote_exec_file function showed the value in a very terse\nway.  Using the generic code, it now looks like:\n\n    The remote pathname for \"run\" is \"foo\".\n\nChange-Id: I5529632c4f6505ec6cab696ab825aa2cb88567cf\n","web_links":[{"name":"gitweb","tooltip":"Open in GitWeb","url":"/gitweb?p\u003dbinutils-gdb.git;a\u003dcommit;h\u003d21a5f9be87b6a9ef2de7640ebed65e4d0e291a58"}],"resolve_conflicts_web_links":[{"name":"gitweb","tooltip":"Open in GitWeb","url":"/gitweb?p\u003dbinutils-gdb.git;a\u003dcommit;h\u003d21a5f9be87b6a9ef2de7640ebed65e4d0e291a58"}]},"branch":"refs/heads/master"},"1d3802fb6e7c59de9fd30ddc44e42a24e5f89b07":{"kind":"TRIVIAL_REBASE","_number":44,"created":"2021-08-19 20:35:45.000000000","uploader":{"_account_id":1000001,"name":"Simon Marchi","email":"simon.marchi@efficios.com","username":"simark","avatars":[{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/5f66b515fa1c72f5ab184df919253b2f.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d120","height":120}]},"ref":"refs/changes/31/5831/44","fetch":{"anonymous http":{"url":"https://review.lttng.org/binutils-gdb","ref":"refs/changes/31/5831/44","commands":{"Branch":"git fetch https://review.lttng.org/binutils-gdb refs/changes/31/5831/44 \u0026\u0026 git checkout -b change-5831 FETCH_HEAD","Checkout":"git fetch https://review.lttng.org/binutils-gdb refs/changes/31/5831/44 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://review.lttng.org/binutils-gdb refs/changes/31/5831/44 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://review.lttng.org/binutils-gdb refs/changes/31/5831/44 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://review.lttng.org/binutils-gdb refs/changes/31/5831/44","Reset To":"git fetch https://review.lttng.org/binutils-gdb refs/changes/31/5831/44 \u0026\u0026 git reset --hard FETCH_HEAD"}}},"commit":{"parents":[{"commit":"002e0066dee154fcc67554048d12055b3f95a29c","subject":"gdb: Setting setter return a bool to tell if the value changed","web_links":[{"name":"gitweb","tooltip":"Open in GitWeb","url":"/gitweb?p\u003dbinutils-gdb.git;a\u003dcommit;h\u003d002e0066dee154fcc67554048d12055b3f95a29c"}]}],"author":{"name":"Simon Marchi","email":"simon.marchi@polymtl.ca","date":"2021-07-09 00:21:23.000000000","tz":-240},"committer":{"name":"Simon Marchi","email":"simon.marchi@polymtl.ca","date":"2021-08-19 20:30:32.000000000","tz":-240},"subject":"gdb: fix per-inferior settings through MI/Python/Guile/with command/$_gdb_setting","message":"gdb: fix per-inferior settings through MI/Python/Guile/with command/$_gdb_setting\n\nThe settings whose source of truth is not the global variable registered\nwith the set/show commands may give erroneous values when accessed\nthrough MI, Python, Guild, the \"with\" command and the $_gdb_setting /\n$_gdb_setting_str convenience functions.  The instances of this I know\nof are per-inferior settings, such as \"set inferior-tty\", hence why this\npatch title says \"per-inferior\".\n\nTo give an example, here\u0027s the \"inferior-tty\" value accessed using MI\nand Python, dealing with two inferiors, where the shown value should\ndepend on the selected inferior:\n\n    (gdb)\n    add-inferior\n    \u0026\"add-inferior\\n\"\n    \u003dthread-group-added,id\u003d\"i2\"\n    ~\"[New inferior 2]\\n\"\n    ~\"Added inferior 2\\n\"\n    ^done\n    (gdb)\n    set inferior-tty /a\n    \u0026\"set inferior-tty /a\\n\"\n    \u003dcmd-param-changed,param\u003d\"inferior-tty\",value\u003d\"/a\"\n    ^done\n    (gdb)\n    inferior 2\n    \u0026\"inferior 2\\n\"\n    ~\"[Switching to inferior 2 [\u003cnull\u003e] (\u003cnoexec\u003e)]\\n\"\n    ^done\n    (gdb)\n    set inferior-tty /b\n    \u0026\"set inferior-tty /b\\n\"\n    \u003dcmd-param-changed,param\u003d\"inferior-tty\",value\u003d\"/b\"\n    ^done\n    (gdb)\n    -gdb-show inferior-tty\n    ^done,value\u003d\"/b\"\n    (gdb)\n    inferior 1\n    \u0026\"inferior 1\\n\"\n    ~\"[Switching to inferior 1 [\u003cnull\u003e] (\u003cnoexec\u003e)]\\n\"\n    ^done\n    (gdb)\n    -gdb-show inferior-tty\n    ^done,value\u003d\"/b\"\n\nThe last `-gdb-show` shows `/b` for inferior 1, we would expect `/a`.\n\n    (gdb) add-inferior\n    [New inferior 2]\n    Added inferior 2\n    (gdb) set inferior-tty /a\n    (gdb) inferior 2\n    [Switching to inferior 2 [\u003cnull\u003e] (\u003cnoexec\u003e)]\n    (gdb) set inferior-tty /b\n    (gdb) python print(gdb.parameter(\u0027inferior-tty\u0027))\n    /b\n    (gdb) inferior 1\n    [Switching to inferior 1 [\u003cnull\u003e] (\u003cnoexec\u003e)]\n    (gdb) python print(gdb.parameter(\u0027inferior-tty\u0027))\n    /b\n\nThe last `gdb.parameter` shows `/b` for inferior 1, we would expect\n`/a`.\n\nThe reason for this is the scratch variable used by the set command.\nSettings (the things conceptually created using add_setshow_* functions)\ncontain a pointer to a global variable, where the `set` command store\nthe value when executed. By default, the show command shows the value\nfrom this global variable as well.  Per-inferior settings are\nimplemented on top of regular global settings.  The trick is that they\nspecify a custom \"set\" command callback that copies the content from the\nscratch variable to the current inferior\u0027s structure.  The global\nvariable is therefore only used as a scratchpad between the set command\nand the callback.\n\nThese settings also use custom show callbacks that read the shown value\nfrom the current inferior\u0027s structure, ignoring the value in the scratch\nvariable.  These show functions therefore do the right thing, they show\na value based on the selected inferior.  MI\u0027s -gdb-show and Python\u0027s\ngdb.parameter, however, don\u0027t do that, they read the setting\u0027s value\nthrough the global variable pointer.  For per-inferior parameters, that\nvariable contains the last value set, not the value for the current\ninferior.\n\nIn my opinion, this bug can happen because of the \"bad\" design of having\nthe scratch variable.  I presume that at some point, all parameters were\nglobal, and this \"hack\" was added on top of that to get what looked like\nper-inferior parameters.\n\nI want to fix this in a somewhat nice way and try to evolve the design\nin the right direction.  This patch adds versions of some add_setshow\nfunctions that take a getter and setter callbacks instead of a pointer\nto a global variable.  The getters / setters can get / set the value as\nthey see fit (like, from the current inferior), without the need for a\ntemporary scratch variable.\n\nThe get / set callbacks are stored in the cmd_list_element::function\nunion.  The getter is stored in the show command and the setter in\nstored in the set command.  What determines whether a show or set\ncommand uses the getter / setter callbacks or the global variable\npointer is whether the cmd_list_element::var has a value or not.\n\nThe various places that get / set setting values are updated to account\nfor the fact that some setting types can use either the callbacks or the\nglobal variable pointer.  These places are:\n\n - value_from_setting\n - str_value_from_setting\n - get_setshow_command_value_string\n - do_set_command\n - gdbpy_parameter_value\n\n[note: the guile bindings should be updated as well but aren\u0027t at the\nmoment]\n\nAs of this patch, only a few setting types (auto_boolean, boolean,\nfilename, string_noescape and optional_filename) were updated to allow\nbeing implemented with get / set callbacks.  The other can be updated as\nneeded.\n\nThis patch converts a few per-inferior settings to use this:\n\n - inferior-tty\n - args\n - cwd\n - remote exec-file\n - tdesc filename\n\nIt also converts a few other settings where the \"set\" can fail.  For\nexample, when trying to \"set non-stop\" while the program is running, the\nset is rejected and the setting remains unchanged.  To implement this,\ntwo variables are needed non_stop (the real value) and non_stop_1 (a\nscratch variable), and care must be taken to revert the scratch\nvariable\u0027s value on failure, so that \"show non-stop\" shows the right\nthing.  I think all this becomes more straightforward when using the new\nsystem.  If the setting\u0027s value can\u0027t be changed, the setter just\ndoesn\u0027t write the value, that\u0027s it.  The settings changed like this are:\n\n - non-stop\n\nThe show callbacks (used to print setting values on the CLI in a custom\nway) do not really change.  The only difference is that they can now\ntrust the \"value\" argument they receive, even for per-inferior\nsettings.\n\nThe show_remote_exec_file function is no longer needed.  It existed\nin order to show the right value (based on the current inferior) of\nthe remote exec-file, because the value in the global variable wasn\u0027t\nnecessarily the right one.  Now that the setting is defined using a\ngetter and a setter, the generic code does the right thing.  Also,\nthe show_remote_exec_file function showed the value in a very terse\nway.  Using the generic code, it now looks like:\n\n    The remote pathname for \"run\" is \"foo\".\n\nChange-Id: I5529632c4f6505ec6cab696ab825aa2cb88567cf\n","web_links":[{"name":"gitweb","tooltip":"Open in GitWeb","url":"/gitweb?p\u003dbinutils-gdb.git;a\u003dcommit;h\u003d1d3802fb6e7c59de9fd30ddc44e42a24e5f89b07"}],"resolve_conflicts_web_links":[{"name":"gitweb","tooltip":"Open in GitWeb","url":"/gitweb?p\u003dbinutils-gdb.git;a\u003dcommit;h\u003d1d3802fb6e7c59de9fd30ddc44e42a24e5f89b07"}]},"branch":"refs/heads/master"},"6f7a7d286079048398e3132e552edf7e4b4bcf22":{"kind":"REWORK","_number":45,"created":"2025-09-19 18:41:34.000000000","uploader":{"_account_id":1000090,"name":"Sébastien D","email":"sdarche@efficios.com","username":"Sebdar","avatars":[{"url":"https://www.gravatar.com/avatar/154d9c1bff6c233d2054afdc88226df9.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/154d9c1bff6c233d2054afdc88226df9.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/154d9c1bff6c233d2054afdc88226df9.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/154d9c1bff6c233d2054afdc88226df9.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d120","height":120}]},"ref":"refs/changes/31/5831/45","fetch":{"anonymous http":{"url":"https://review.lttng.org/binutils-gdb","ref":"refs/changes/31/5831/45","commands":{"Branch":"git fetch https://review.lttng.org/binutils-gdb refs/changes/31/5831/45 \u0026\u0026 git checkout -b change-5831 FETCH_HEAD","Checkout":"git fetch https://review.lttng.org/binutils-gdb refs/changes/31/5831/45 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://review.lttng.org/binutils-gdb refs/changes/31/5831/45 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://review.lttng.org/binutils-gdb refs/changes/31/5831/45 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://review.lttng.org/binutils-gdb refs/changes/31/5831/45","Reset To":"git fetch https://review.lttng.org/binutils-gdb refs/changes/31/5831/45 \u0026\u0026 git reset --hard FETCH_HEAD"}}},"commit":{"parents":[{"commit":"7fb4db4c6316347a83b152d94c9aa74641b970dc","subject":"gdb/riscv/record: remove possibility of recording an empty instruction","web_links":[{"name":"gitweb","tooltip":"Open in GitWeb","url":"/gitweb?p\u003dbinutils-gdb.git;a\u003dcommit;h\u003d7fb4db4c6316347a83b152d94c9aa74641b970dc"}]}],"author":{"name":"Simon Marchi","email":"simon.marchi@amd.com","date":"2021-08-23 15:09:51.000000000","tz":0},"committer":{"name":"Sébastien Darche","email":"sdarche@efficios.com","date":"2025-09-19 18:39:50.000000000","tz":-240},"subject":"gdb: fix per-inferior settings through MI/Python/Guile/with command/$_gdb_setting","message":"gdb: fix per-inferior settings through MI/Python/Guile/with command/$_gdb_setting\n\nThe settings whose source of truth is not the global variable registered\nwith the set/show commands may give erroneous values when accessed\nthrough MI, Python, Guile, the \"with\" command and the $_gdb_setting /\n$_gdb_setting_str convenience functions.  The instances of this I know\nof are per-inferior settings, such as \"set inferior-tty\", hence why this\npatch title says \"per-inferior\".\n\nTo give an example, here\u0027s the \"inferior-tty\" value accessed using MI\nand Python, dealing with two inferiors, where the shown value should\ndepend on the selected inferior:\n\n    (gdb)\n    add-inferior\n    \u0026\"add-inferior\\n\"\n    \u003dthread-group-added,id\u003d\"i2\"\n    ~\"[New inferior 2]\\n\"\n    ~\"Added inferior 2\\n\"\n    ^done\n    (gdb)\n    set inferior-tty /a\n    \u0026\"set inferior-tty /a\\n\"\n    \u003dcmd-param-changed,param\u003d\"inferior-tty\",value\u003d\"/a\"\n    ^done\n    (gdb)\n    inferior 2\n    \u0026\"inferior 2\\n\"\n    ~\"[Switching to inferior 2 [\u003cnull\u003e] (\u003cnoexec\u003e)]\\n\"\n    ^done\n    (gdb)\n    set inferior-tty /b\n    \u0026\"set inferior-tty /b\\n\"\n    \u003dcmd-param-changed,param\u003d\"inferior-tty\",value\u003d\"/b\"\n    ^done\n    (gdb)\n    -gdb-show inferior-tty\n    ^done,value\u003d\"/b\"\n    (gdb)\n    inferior 1\n    \u0026\"inferior 1\\n\"\n    ~\"[Switching to inferior 1 [\u003cnull\u003e] (\u003cnoexec\u003e)]\\n\"\n    ^done\n    (gdb)\n    -gdb-show inferior-tty\n    ^done,value\u003d\"/b\"\n\nThe last `-gdb-show` shows `/b` for inferior 1, we would expect `/a`.\n\n    (gdb) add-inferior\n    [New inferior 2]\n    Added inferior 2\n    (gdb) set inferior-tty /a\n    (gdb) inferior 2\n    [Switching to inferior 2 [\u003cnull\u003e] (\u003cnoexec\u003e)]\n    (gdb) set inferior-tty /b\n    (gdb) python print(gdb.parameter(\u0027inferior-tty\u0027))\n    /b\n    (gdb) inferior 1\n    [Switching to inferior 1 [\u003cnull\u003e] (\u003cnoexec\u003e)]\n    (gdb) python print(gdb.parameter(\u0027inferior-tty\u0027))\n    /b\n\nThe last `gdb.parameter` shows `/b` for inferior 1, we would expect\n`/a`.\n\nThe reason for this is the scratch variable used by the set command.\nSettings (the things conceptually created using add_setshow_* functions)\ncontain a pointer to a global variable, where the `set` command store\nthe value when executed. By default, the show command shows the value\nfrom this global variable as well.  Per-inferior settings are\nimplemented on top of regular global settings.  The trick is that they\nspecify a custom \"set\" command callback that copies the content from the\nscratch variable to the current inferior\u0027s structure.  The global\nvariable is therefore only used as a scratchpad between the set command\nand the callback.\n\nThese settings also use custom show callbacks that read the shown value\nfrom the current inferior\u0027s structure, ignoring the value in the scratch\nvariable.  These show functions therefore do the right thing, they show\na value based on the selected inferior.  MI\u0027s -gdb-show and Python\u0027s\ngdb.parameter, however, don\u0027t do that, they read the setting\u0027s value\nthrough the global variable pointer.  For per-inferior parameters, that\nvariable contains the last value set, not the value for the current\ninferior.\n\nIn my opinion, this bug exists because of the \"bad\" design of having the\nscratch variable.  I presume that at some point, all parameters were\nglobal, and this \"hack\" was added on top of that to get what looked like\nper-inferior parameters.\n\nI want to fix this in a somewhat nice way and try to evolve the design\nin the right direction.  A preceding patch added versions of the\nadd_setshow functions that take a getter and setter callbacks instead of\na pointer to a global variable.  The getters / setters can get / set the\nvalue as they see fit (like, from the current inferior), without the\nneed for a temporary scratch variable.\n\nThis patch converts a few per-inferior settings to use this:\n\n - inferior-tty\n - args\n - cwd\n - remote exec-file\n - tdesc filename\n\nThe show callbacks (used to print setting values on the CLI in a custom\nway) do not really change.  The only difference is that they can now\ntrust the \"value\" argument they receive, even for per-inferior\nsettings.\n\nThe show_remote_exec_file function is no longer needed.  It existed\nin order to show the right value (based on the current inferior) of\nthe remote exec-file, because the value in the global variable wasn\u0027t\nnecessarily the right one.  Now that the setting is defined using a\ngetter and a setter, the generic code does the right thing.  Also,\nthe show_remote_exec_file function showed the value in a very terse\nway.  Using the generic code, it now looks like:\n\n    The remote pathname for \"run\" is \"foo\".\n\nChange-Id: I5529632c4f6505ec6cab696ab825aa2cb88567cf\n","web_links":[{"name":"gitweb","tooltip":"Open in GitWeb","url":"/gitweb?p\u003dbinutils-gdb.git;a\u003dcommit;h\u003d6f7a7d286079048398e3132e552edf7e4b4bcf22"}],"resolve_conflicts_web_links":[{"name":"gitweb","tooltip":"Open in GitWeb","url":"/gitweb?p\u003dbinutils-gdb.git;a\u003dcommit;h\u003d6f7a7d286079048398e3132e552edf7e4b4bcf22"}]},"branch":"refs/heads/master"},"44bcfebccc1a49c6358236f61583826983e244de":{"kind":"REWORK","_number":46,"created":"2025-09-19 19:15:38.000000000","uploader":{"_account_id":1000090,"name":"Sébastien D","email":"sdarche@efficios.com","username":"Sebdar","avatars":[{"url":"https://www.gravatar.com/avatar/154d9c1bff6c233d2054afdc88226df9.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/154d9c1bff6c233d2054afdc88226df9.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/154d9c1bff6c233d2054afdc88226df9.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/154d9c1bff6c233d2054afdc88226df9.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d120","height":120}]},"ref":"refs/changes/31/5831/46","fetch":{"anonymous http":{"url":"https://review.lttng.org/binutils-gdb","ref":"refs/changes/31/5831/46","commands":{"Branch":"git fetch https://review.lttng.org/binutils-gdb refs/changes/31/5831/46 \u0026\u0026 git checkout -b change-5831 FETCH_HEAD","Checkout":"git fetch https://review.lttng.org/binutils-gdb refs/changes/31/5831/46 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://review.lttng.org/binutils-gdb refs/changes/31/5831/46 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://review.lttng.org/binutils-gdb refs/changes/31/5831/46 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://review.lttng.org/binutils-gdb refs/changes/31/5831/46","Reset To":"git fetch https://review.lttng.org/binutils-gdb refs/changes/31/5831/46 \u0026\u0026 git reset --hard FETCH_HEAD"}}},"commit":{"parents":[{"commit":"7fb4db4c6316347a83b152d94c9aa74641b970dc","subject":"gdb/riscv/record: remove possibility of recording an empty instruction","web_links":[{"name":"gitweb","tooltip":"Open in GitWeb","url":"/gitweb?p\u003dbinutils-gdb.git;a\u003dcommit;h\u003d7fb4db4c6316347a83b152d94c9aa74641b970dc"}]}],"author":{"name":"Simon Marchi","email":"simon.marchi@amd.com","date":"2021-08-23 15:09:51.000000000","tz":0},"committer":{"name":"Sébastien Darche","email":"sdarche@efficios.com","date":"2025-09-19 19:15:32.000000000","tz":-240},"subject":"gdb: fix per-inferior settings through MI/Python/Guile/with command/$_gdb_setting","message":"gdb: fix per-inferior settings through MI/Python/Guile/with command/$_gdb_setting\n\nThe settings whose source of truth is not the global variable registered\nwith the set/show commands may give erroneous values when accessed\nthrough MI, Python, Guile, the \"with\" command and the $_gdb_setting /\n$_gdb_setting_str convenience functions.  The instances of this I know\nof are per-inferior settings, such as \"set inferior-tty\", hence why this\npatch title says \"per-inferior\".\n\nTo give an example, here\u0027s the \"inferior-tty\" value accessed using MI\nand Python, dealing with two inferiors, where the shown value should\ndepend on the selected inferior:\n\n    (gdb)\n    add-inferior\n    \u0026\"add-inferior\\n\"\n    \u003dthread-group-added,id\u003d\"i2\"\n    ~\"[New inferior 2]\\n\"\n    ~\"Added inferior 2\\n\"\n    ^done\n    (gdb)\n    set inferior-tty /a\n    \u0026\"set inferior-tty /a\\n\"\n    \u003dcmd-param-changed,param\u003d\"inferior-tty\",value\u003d\"/a\"\n    ^done\n    (gdb)\n    inferior 2\n    \u0026\"inferior 2\\n\"\n    ~\"[Switching to inferior 2 [\u003cnull\u003e] (\u003cnoexec\u003e)]\\n\"\n    ^done\n    (gdb)\n    set inferior-tty /b\n    \u0026\"set inferior-tty /b\\n\"\n    \u003dcmd-param-changed,param\u003d\"inferior-tty\",value\u003d\"/b\"\n    ^done\n    (gdb)\n    -gdb-show inferior-tty\n    ^done,value\u003d\"/b\"\n    (gdb)\n    inferior 1\n    \u0026\"inferior 1\\n\"\n    ~\"[Switching to inferior 1 [\u003cnull\u003e] (\u003cnoexec\u003e)]\\n\"\n    ^done\n    (gdb)\n    -gdb-show inferior-tty\n    ^done,value\u003d\"/b\"\n\nThe last `-gdb-show` shows `/b` for inferior 1, we would expect `/a`.\n\n    (gdb) add-inferior\n    [New inferior 2]\n    Added inferior 2\n    (gdb) set inferior-tty /a\n    (gdb) inferior 2\n    [Switching to inferior 2 [\u003cnull\u003e] (\u003cnoexec\u003e)]\n    (gdb) set inferior-tty /b\n    (gdb) python print(gdb.parameter(\u0027inferior-tty\u0027))\n    /b\n    (gdb) inferior 1\n    [Switching to inferior 1 [\u003cnull\u003e] (\u003cnoexec\u003e)]\n    (gdb) python print(gdb.parameter(\u0027inferior-tty\u0027))\n    /b\n\nThe last `gdb.parameter` shows `/b` for inferior 1, we would expect\n`/a`.\n\nThe reason for this is the scratch variable used by the set command.\nSettings (the things conceptually created using add_setshow_* functions)\ncontain a pointer to a global variable, where the `set` command store\nthe value when executed. By default, the show command shows the value\nfrom this global variable as well.  Per-inferior settings are\nimplemented on top of regular global settings.  The trick is that they\nspecify a custom \"set\" command callback that copies the content from the\nscratch variable to the current inferior\u0027s structure.  The global\nvariable is therefore only used as a scratchpad between the set command\nand the callback.\n\nThese settings also use custom show callbacks that read the shown value\nfrom the current inferior\u0027s structure, ignoring the value in the scratch\nvariable.  These show functions therefore do the right thing, they show\na value based on the selected inferior.  MI\u0027s -gdb-show and Python\u0027s\ngdb.parameter, however, don\u0027t do that, they read the setting\u0027s value\nthrough the global variable pointer.  For per-inferior parameters, that\nvariable contains the last value set, not the value for the current\ninferior.\n\nIn my opinion, this bug exists because of the \"bad\" design of having the\nscratch variable.  I presume that at some point, all parameters were\nglobal, and this \"hack\" was added on top of that to get what looked like\nper-inferior parameters.\n\nI want to fix this in a somewhat nice way and try to evolve the design\nin the right direction.  A preceding patch added versions of the\nadd_setshow functions that take a getter and setter callbacks instead of\na pointer to a global variable.  The getters / setters can get / set the\nvalue as they see fit (like, from the current inferior), without the\nneed for a temporary scratch variable.\n\nThis patch converts a few per-inferior settings to use this:\n\n - inferior-tty\n - args\n - cwd\n - remote exec-file\n - tdesc filename\n\nThe show callbacks (used to print setting values on the CLI in a custom\nway) do not really change.  The only difference is that they can now\ntrust the \"value\" argument they receive, even for per-inferior\nsettings.\n\nThe show_remote_exec_file function is no longer needed.  It existed\nin order to show the right value (based on the current inferior) of\nthe remote exec-file, because the value in the global variable wasn\u0027t\nnecessarily the right one.  Now that the setting is defined using a\ngetter and a setter, the generic code does the right thing.  Also,\nthe show_remote_exec_file function showed the value in a very terse\nway.  Using the generic code, it now looks like:\n\n    The remote pathname for \"run\" is \"foo\".\n\nChange-Id: I5529632c4f6505ec6cab696ab825aa2cb88567cf\n","web_links":[{"name":"gitweb","tooltip":"Open in GitWeb","url":"/gitweb?p\u003dbinutils-gdb.git;a\u003dcommit;h\u003d44bcfebccc1a49c6358236f61583826983e244de"}],"resolve_conflicts_web_links":[{"name":"gitweb","tooltip":"Open in GitWeb","url":"/gitweb?p\u003dbinutils-gdb.git;a\u003dcommit;h\u003d44bcfebccc1a49c6358236f61583826983e244de"}]},"branch":"refs/heads/master"},"3853bc86a7d8f05f9a965b5b374a0e5bf84a0c76":{"kind":"NO_CODE_CHANGE","_number":47,"created":"2025-09-22 17:09:06.000000000","uploader":{"_account_id":1000090,"name":"Sébastien D","email":"sdarche@efficios.com","username":"Sebdar","avatars":[{"url":"https://www.gravatar.com/avatar/154d9c1bff6c233d2054afdc88226df9.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/154d9c1bff6c233d2054afdc88226df9.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/154d9c1bff6c233d2054afdc88226df9.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/154d9c1bff6c233d2054afdc88226df9.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d120","height":120}]},"ref":"refs/changes/31/5831/47","fetch":{"anonymous http":{"url":"https://review.lttng.org/binutils-gdb","ref":"refs/changes/31/5831/47","commands":{"Branch":"git fetch https://review.lttng.org/binutils-gdb refs/changes/31/5831/47 \u0026\u0026 git checkout -b change-5831 FETCH_HEAD","Checkout":"git fetch https://review.lttng.org/binutils-gdb refs/changes/31/5831/47 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://review.lttng.org/binutils-gdb refs/changes/31/5831/47 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://review.lttng.org/binutils-gdb refs/changes/31/5831/47 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://review.lttng.org/binutils-gdb refs/changes/31/5831/47","Reset To":"git fetch https://review.lttng.org/binutils-gdb refs/changes/31/5831/47 \u0026\u0026 git reset --hard FETCH_HEAD"}}},"commit":{"parents":[{"commit":"7fb4db4c6316347a83b152d94c9aa74641b970dc","subject":"gdb/riscv/record: remove possibility of recording an empty instruction","web_links":[{"name":"gitweb","tooltip":"Open in GitWeb","url":"/gitweb?p\u003dbinutils-gdb.git;a\u003dcommit;h\u003d7fb4db4c6316347a83b152d94c9aa74641b970dc"}]}],"author":{"name":"Simon Marchi","email":"simon.marchi@amd.com","date":"2021-08-23 15:09:51.000000000","tz":0},"committer":{"name":"Sébastien Darche","email":"sdarche@efficios.com","date":"2025-09-22 17:07:56.000000000","tz":-240},"subject":"gdb: fix per-inferior settings through MI/Python/Guile/with command/$_gdb_setting","message":"gdb: fix per-inferior settings through MI/Python/Guile/with command/$_gdb_setting\n\nThe settings whose source of truth is not the global variable registered\nwith the set/show commands may give erroneous values when accessed\nthrough MI, Python, Guile, the \"with\" command and the $_gdb_setting /\n$_gdb_setting_str convenience functions.  The instances of this I know\nof are per-inferior settings, such as \"set inferior-tty\", hence why this\npatch title says \"per-inferior\".\n\nTo give an example, here\u0027s the \"inferior-tty\" value accessed using MI\nand Python, dealing with two inferiors, where the shown value should\ndepend on the selected inferior:\n\n    (gdb)\n    add-inferior\n    \u0026\"add-inferior\\n\"\n    \u003dthread-group-added,id\u003d\"i2\"\n    ~\"[New inferior 2]\\n\"\n    ~\"Added inferior 2\\n\"\n    ^done\n    (gdb)\n    set inferior-tty /a\n    \u0026\"set inferior-tty /a\\n\"\n    \u003dcmd-param-changed,param\u003d\"inferior-tty\",value\u003d\"/a\"\n    ^done\n    (gdb)\n    inferior 2\n    \u0026\"inferior 2\\n\"\n    ~\"[Switching to inferior 2 [\u003cnull\u003e] (\u003cnoexec\u003e)]\\n\"\n    ^done\n    (gdb)\n    set inferior-tty /b\n    \u0026\"set inferior-tty /b\\n\"\n    \u003dcmd-param-changed,param\u003d\"inferior-tty\",value\u003d\"/b\"\n    ^done\n    (gdb)\n    -gdb-show inferior-tty\n    ^done,value\u003d\"/b\"\n    (gdb)\n    inferior 1\n    \u0026\"inferior 1\\n\"\n    ~\"[Switching to inferior 1 [\u003cnull\u003e] (\u003cnoexec\u003e)]\\n\"\n    ^done\n    (gdb)\n    -gdb-show inferior-tty\n    ^done,value\u003d\"/b\"\n\nThe last `-gdb-show` shows `/b` for inferior 1, we would expect `/a`.\n\n    (gdb) add-inferior\n    [New inferior 2]\n    Added inferior 2\n    (gdb) set inferior-tty /a\n    (gdb) inferior 2\n    [Switching to inferior 2 [\u003cnull\u003e] (\u003cnoexec\u003e)]\n    (gdb) set inferior-tty /b\n    (gdb) python print(gdb.parameter(\u0027inferior-tty\u0027))\n    /b\n    (gdb) inferior 1\n    [Switching to inferior 1 [\u003cnull\u003e] (\u003cnoexec\u003e)]\n    (gdb) python print(gdb.parameter(\u0027inferior-tty\u0027))\n    /b\n\nThe last `gdb.parameter` shows `/b` for inferior 1, we would expect\n`/a`.\n\nThe reason for this is the scratch variable used by the set command.\nSettings (the things conceptually created using add_setshow_* functions)\ncontain a pointer to a global variable, where the `set` command store\nthe value when executed. By default, the show command shows the value\nfrom this global variable as well.  Per-inferior settings are\nimplemented on top of regular global settings.  The trick is that they\nspecify a custom \"set\" command callback that copies the content from the\nscratch variable to the current inferior\u0027s structure.  The global\nvariable is therefore only used as a scratchpad between the set command\nand the callback.\n\nThese settings also use custom show callbacks that read the shown value\nfrom the current inferior\u0027s structure, ignoring the value in the scratch\nvariable.  These show functions therefore do the right thing, they show\na value based on the selected inferior.  MI\u0027s -gdb-show and Python\u0027s\ngdb.parameter, however, don\u0027t do that, they read the setting\u0027s value\nthrough the global variable pointer.  For per-inferior parameters, that\nvariable contains the last value set, not the value for the current\ninferior.\n\nIn my opinion, this bug exists because of the \"bad\" design of having the\nscratch variable.  I presume that at some point, all parameters were\nglobal, and this \"hack\" was added on top of that to get what looked like\nper-inferior parameters.\n\nI want to fix this in a somewhat nice way and try to evolve the design\nin the right direction.  A preceding patch added versions of the\nadd_setshow functions that take a getter and setter callbacks instead of\na pointer to a global variable.  The getters / setters can get / set the\nvalue as they see fit (like, from the current inferior), without the\nneed for a temporary scratch variable.\n\nThis patch converts a few per-inferior settings to use this:\n\n - inferior-tty\n - args\n - cwd\n - remote exec-file\n - tdesc filename\n\nThe show callbacks (used to print setting values on the CLI in a custom\nway) do not really change.  The only difference is that they can now\ntrust the \"value\" argument they receive, even for per-inferior\nsettings.\n\nThe show_remote_exec_file function is no longer needed.  It existed\nin order to show the right value (based on the current inferior) of\nthe remote exec-file, because the value in the global variable wasn\u0027t\nnecessarily the right one.  Now that the setting is defined using a\ngetter and a setter, the generic code does the right thing.  Also,\nthe show_remote_exec_file function showed the value in a very terse\nway.  Using the generic code, it now looks like:\n\n    The remote pathname for \"run\" is \"foo\".\n\nCo-Authored-By: Sébastien Darche \u003csdarche@efficios.com\u003e\nChange-Id: I5529632c4f6505ec6cab696ab825aa2cb88567cf\n","web_links":[{"name":"gitweb","tooltip":"Open in GitWeb","url":"/gitweb?p\u003dbinutils-gdb.git;a\u003dcommit;h\u003d3853bc86a7d8f05f9a965b5b374a0e5bf84a0c76"}],"resolve_conflicts_web_links":[{"name":"gitweb","tooltip":"Open in GitWeb","url":"/gitweb?p\u003dbinutils-gdb.git;a\u003dcommit;h\u003d3853bc86a7d8f05f9a965b5b374a0e5bf84a0c76"}]},"branch":"refs/heads/master"},"6485eeb28ea7708e29dcbf3f9d34f2cbe21869b1":{"kind":"REWORK","_number":48,"created":"2025-09-22 17:09:34.000000000","uploader":{"_account_id":1000090,"name":"Sébastien D","email":"sdarche@efficios.com","username":"Sebdar","avatars":[{"url":"https://www.gravatar.com/avatar/154d9c1bff6c233d2054afdc88226df9.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/154d9c1bff6c233d2054afdc88226df9.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/154d9c1bff6c233d2054afdc88226df9.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/154d9c1bff6c233d2054afdc88226df9.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d120","height":120}]},"ref":"refs/changes/31/5831/48","fetch":{"anonymous http":{"url":"https://review.lttng.org/binutils-gdb","ref":"refs/changes/31/5831/48","commands":{"Branch":"git fetch https://review.lttng.org/binutils-gdb refs/changes/31/5831/48 \u0026\u0026 git checkout -b change-5831 FETCH_HEAD","Checkout":"git fetch https://review.lttng.org/binutils-gdb refs/changes/31/5831/48 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://review.lttng.org/binutils-gdb refs/changes/31/5831/48 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://review.lttng.org/binutils-gdb refs/changes/31/5831/48 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://review.lttng.org/binutils-gdb refs/changes/31/5831/48","Reset To":"git fetch https://review.lttng.org/binutils-gdb refs/changes/31/5831/48 \u0026\u0026 git reset --hard FETCH_HEAD"}}},"commit":{"parents":[{"commit":"7fb4db4c6316347a83b152d94c9aa74641b970dc","subject":"gdb/riscv/record: remove possibility of recording an empty instruction","web_links":[{"name":"gitweb","tooltip":"Open in GitWeb","url":"/gitweb?p\u003dbinutils-gdb.git;a\u003dcommit;h\u003d7fb4db4c6316347a83b152d94c9aa74641b970dc"}]}],"author":{"name":"Simon Marchi","email":"simon.marchi@amd.com","date":"2021-08-23 15:09:51.000000000","tz":0},"committer":{"name":"Sébastien Darche","email":"sdarche@efficios.com","date":"2025-09-22 17:09:28.000000000","tz":-240},"subject":"gdb: fix per-inferior settings through MI/Python/Guile/with command/$_gdb_setting","message":"gdb: fix per-inferior settings through MI/Python/Guile/with command/$_gdb_setting\n\nThe settings whose source of truth is not the global variable registered\nwith the set/show commands may give erroneous values when accessed\nthrough MI, Python, Guile, the \"with\" command and the $_gdb_setting /\n$_gdb_setting_str convenience functions.  The instances of this I know\nof are per-inferior settings, such as \"set inferior-tty\", hence why this\npatch title says \"per-inferior\".\n\nTo give an example, here\u0027s the \"inferior-tty\" value accessed using MI\nand Python, dealing with two inferiors, where the shown value should\ndepend on the selected inferior:\n\n    (gdb)\n    add-inferior\n    \u0026\"add-inferior\\n\"\n    \u003dthread-group-added,id\u003d\"i2\"\n    ~\"[New inferior 2]\\n\"\n    ~\"Added inferior 2\\n\"\n    ^done\n    (gdb)\n    set inferior-tty /a\n    \u0026\"set inferior-tty /a\\n\"\n    \u003dcmd-param-changed,param\u003d\"inferior-tty\",value\u003d\"/a\"\n    ^done\n    (gdb)\n    inferior 2\n    \u0026\"inferior 2\\n\"\n    ~\"[Switching to inferior 2 [\u003cnull\u003e] (\u003cnoexec\u003e)]\\n\"\n    ^done\n    (gdb)\n    set inferior-tty /b\n    \u0026\"set inferior-tty /b\\n\"\n    \u003dcmd-param-changed,param\u003d\"inferior-tty\",value\u003d\"/b\"\n    ^done\n    (gdb)\n    -gdb-show inferior-tty\n    ^done,value\u003d\"/b\"\n    (gdb)\n    inferior 1\n    \u0026\"inferior 1\\n\"\n    ~\"[Switching to inferior 1 [\u003cnull\u003e] (\u003cnoexec\u003e)]\\n\"\n    ^done\n    (gdb)\n    -gdb-show inferior-tty\n    ^done,value\u003d\"/b\"\n\nThe last `-gdb-show` shows `/b` for inferior 1, we would expect `/a`.\n\n    (gdb) add-inferior\n    [New inferior 2]\n    Added inferior 2\n    (gdb) set inferior-tty /a\n    (gdb) inferior 2\n    [Switching to inferior 2 [\u003cnull\u003e] (\u003cnoexec\u003e)]\n    (gdb) set inferior-tty /b\n    (gdb) python print(gdb.parameter(\u0027inferior-tty\u0027))\n    /b\n    (gdb) inferior 1\n    [Switching to inferior 1 [\u003cnull\u003e] (\u003cnoexec\u003e)]\n    (gdb) python print(gdb.parameter(\u0027inferior-tty\u0027))\n    /b\n\nThe last `gdb.parameter` shows `/b` for inferior 1, we would expect\n`/a`.\n\nThe reason for this is the scratch variable used by the set command.\nSettings (the things conceptually created using add_setshow_* functions)\ncontain a pointer to a global variable, where the `set` command store\nthe value when executed. By default, the show command shows the value\nfrom this global variable as well.  Per-inferior settings are\nimplemented on top of regular global settings.  The trick is that they\nspecify a custom \"set\" command callback that copies the content from the\nscratch variable to the current inferior\u0027s structure.  The global\nvariable is therefore only used as a scratchpad between the set command\nand the callback.\n\nThese settings also use custom show callbacks that read the shown value\nfrom the current inferior\u0027s structure, ignoring the value in the scratch\nvariable.  These show functions therefore do the right thing, they show\na value based on the selected inferior.  MI\u0027s -gdb-show and Python\u0027s\ngdb.parameter, however, don\u0027t do that, they read the setting\u0027s value\nthrough the global variable pointer.  For per-inferior parameters, that\nvariable contains the last value set, not the value for the current\ninferior.\n\nIn my opinion, this bug exists because of the \"bad\" design of having the\nscratch variable.  I presume that at some point, all parameters were\nglobal, and this \"hack\" was added on top of that to get what looked like\nper-inferior parameters.\n\nI want to fix this in a somewhat nice way and try to evolve the design\nin the right direction.  A preceding patch added versions of the\nadd_setshow functions that take a getter and setter callbacks instead of\na pointer to a global variable.  The getters / setters can get / set the\nvalue as they see fit (like, from the current inferior), without the\nneed for a temporary scratch variable.\n\nThis patch converts a few per-inferior settings to use this:\n\n - inferior-tty\n - args\n - cwd\n - remote exec-file\n - tdesc filename\n\nThe show callbacks (used to print setting values on the CLI in a custom\nway) do not really change.  The only difference is that they can now\ntrust the \"value\" argument they receive, even for per-inferior\nsettings.\n\nThe show_remote_exec_file function is no longer needed.  It existed\nin order to show the right value (based on the current inferior) of\nthe remote exec-file, because the value in the global variable wasn\u0027t\nnecessarily the right one.  Now that the setting is defined using a\ngetter and a setter, the generic code does the right thing.  Also,\nthe show_remote_exec_file function showed the value in a very terse\nway.  Using the generic code, it now looks like:\n\n    The remote pathname for \"run\" is \"foo\".\n\nCo-Authored-By: Sébastien Darche \u003csdarche@efficios.com\u003e\nChange-Id: I5529632c4f6505ec6cab696ab825aa2cb88567cf\n","web_links":[{"name":"gitweb","tooltip":"Open in GitWeb","url":"/gitweb?p\u003dbinutils-gdb.git;a\u003dcommit;h\u003d6485eeb28ea7708e29dcbf3f9d34f2cbe21869b1"}],"resolve_conflicts_web_links":[{"name":"gitweb","tooltip":"Open in GitWeb","url":"/gitweb?p\u003dbinutils-gdb.git;a\u003dcommit;h\u003d6485eeb28ea7708e29dcbf3f9d34f2cbe21869b1"}]},"branch":"refs/heads/master"},"2513240f1cb9703009fe7e86e01f87d8f3abee1c":{"kind":"REWORK","_number":49,"created":"2025-09-22 23:17:46.000000000","uploader":{"_account_id":1000090,"name":"Sébastien D","email":"sdarche@efficios.com","username":"Sebdar","avatars":[{"url":"https://www.gravatar.com/avatar/154d9c1bff6c233d2054afdc88226df9.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/154d9c1bff6c233d2054afdc88226df9.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/154d9c1bff6c233d2054afdc88226df9.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/154d9c1bff6c233d2054afdc88226df9.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d120","height":120}]},"ref":"refs/changes/31/5831/49","fetch":{"anonymous http":{"url":"https://review.lttng.org/binutils-gdb","ref":"refs/changes/31/5831/49","commands":{"Branch":"git fetch https://review.lttng.org/binutils-gdb refs/changes/31/5831/49 \u0026\u0026 git checkout -b change-5831 FETCH_HEAD","Checkout":"git fetch https://review.lttng.org/binutils-gdb refs/changes/31/5831/49 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://review.lttng.org/binutils-gdb refs/changes/31/5831/49 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://review.lttng.org/binutils-gdb refs/changes/31/5831/49 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://review.lttng.org/binutils-gdb refs/changes/31/5831/49","Reset To":"git fetch https://review.lttng.org/binutils-gdb refs/changes/31/5831/49 \u0026\u0026 git reset --hard FETCH_HEAD"}}},"commit":{"parents":[{"commit":"7fb4db4c6316347a83b152d94c9aa74641b970dc","subject":"gdb/riscv/record: remove possibility of recording an empty instruction","web_links":[{"name":"gitweb","tooltip":"Open in GitWeb","url":"/gitweb?p\u003dbinutils-gdb.git;a\u003dcommit;h\u003d7fb4db4c6316347a83b152d94c9aa74641b970dc"}]}],"author":{"name":"Simon Marchi","email":"simon.marchi@amd.com","date":"2021-08-23 15:09:51.000000000","tz":0},"committer":{"name":"Sébastien Darche","email":"sdarche@efficios.com","date":"2025-09-22 23:17:21.000000000","tz":-240},"subject":"gdb: fix per-inferior settings through MI/Python/Guile/with command/$_gdb_setting","message":"gdb: fix per-inferior settings through MI/Python/Guile/with command/$_gdb_setting\n\nThe settings whose source of truth is not the global variable registered\nwith the set/show commands may give erroneous values when accessed\nthrough MI, Python, Guile, the \"with\" command and the $_gdb_setting /\n$_gdb_setting_str convenience functions.  The instances of this I know\nof are per-inferior settings, such as \"set inferior-tty\", hence why this\npatch title says \"per-inferior\".\n\nTo give an example, here\u0027s the \"inferior-tty\" value accessed using MI\nand Python, dealing with two inferiors, where the shown value should\ndepend on the selected inferior:\n\n    (gdb)\n    add-inferior\n    \u0026\"add-inferior\\n\"\n    \u003dthread-group-added,id\u003d\"i2\"\n    ~\"[New inferior 2]\\n\"\n    ~\"Added inferior 2\\n\"\n    ^done\n    (gdb)\n    set inferior-tty /a\n    \u0026\"set inferior-tty /a\\n\"\n    \u003dcmd-param-changed,param\u003d\"inferior-tty\",value\u003d\"/a\"\n    ^done\n    (gdb)\n    inferior 2\n    \u0026\"inferior 2\\n\"\n    ~\"[Switching to inferior 2 [\u003cnull\u003e] (\u003cnoexec\u003e)]\\n\"\n    ^done\n    (gdb)\n    set inferior-tty /b\n    \u0026\"set inferior-tty /b\\n\"\n    \u003dcmd-param-changed,param\u003d\"inferior-tty\",value\u003d\"/b\"\n    ^done\n    (gdb)\n    -gdb-show inferior-tty\n    ^done,value\u003d\"/b\"\n    (gdb)\n    inferior 1\n    \u0026\"inferior 1\\n\"\n    ~\"[Switching to inferior 1 [\u003cnull\u003e] (\u003cnoexec\u003e)]\\n\"\n    ^done\n    (gdb)\n    -gdb-show inferior-tty\n    ^done,value\u003d\"/b\"\n\nThe last `-gdb-show` shows `/b` for inferior 1, we would expect `/a`.\n\n    (gdb) add-inferior\n    [New inferior 2]\n    Added inferior 2\n    (gdb) set inferior-tty /a\n    (gdb) inferior 2\n    [Switching to inferior 2 [\u003cnull\u003e] (\u003cnoexec\u003e)]\n    (gdb) set inferior-tty /b\n    (gdb) python print(gdb.parameter(\u0027inferior-tty\u0027))\n    /b\n    (gdb) inferior 1\n    [Switching to inferior 1 [\u003cnull\u003e] (\u003cnoexec\u003e)]\n    (gdb) python print(gdb.parameter(\u0027inferior-tty\u0027))\n    /b\n\nThe last `gdb.parameter` shows `/b` for inferior 1, we would expect\n`/a`.\n\nThe reason for this is the scratch variable used by the set command.\nSettings (the things conceptually created using add_setshow_* functions)\ncontain a pointer to a global variable, where the `set` command store\nthe value when executed. By default, the show command shows the value\nfrom this global variable as well.  Per-inferior settings are\nimplemented on top of regular global settings.  The trick is that they\nspecify a custom \"set\" command callback that copies the content from the\nscratch variable to the current inferior\u0027s structure.  The global\nvariable is therefore only used as a scratchpad between the set command\nand the callback.\n\nThese settings also use custom show callbacks that read the shown value\nfrom the current inferior\u0027s structure, ignoring the value in the scratch\nvariable.  These show functions therefore do the right thing, they show\na value based on the selected inferior.  MI\u0027s -gdb-show and Python\u0027s\ngdb.parameter, however, don\u0027t do that, they read the setting\u0027s value\nthrough the global variable pointer.  For per-inferior parameters, that\nvariable contains the last value set, not the value for the current\ninferior.\n\nIn my opinion, this bug exists because of the \"bad\" design of having the\nscratch variable.  I presume that at some point, all parameters were\nglobal, and this \"hack\" was added on top of that to get what looked like\nper-inferior parameters.\n\nI want to fix this in a somewhat nice way and try to evolve the design\nin the right direction.  A preceding patch (702991711a91 (\"gdb: Have\nsetter and getter callbacks for settings\") added versions of the\nadd_setshow functions that take a getter and setter callbacks instead of\na pointer to a global variable.  The getters / setters can get / set the\nvalue as they see fit (like, from the current inferior), without the\nneed for a temporary scratch variable.\n\nThis patch converts a few per-inferior settings to use this:\n\n - inferior-tty\n - args\n - cwd\n - remote exec-file\n - tdesc filename\n\nThe show callbacks (used to print setting values on the CLI in a custom\nway) do not really change.  The only difference is that they can now\ntrust the \"value\" argument they receive, even for per-inferior\nsettings.\n\nThe show_remote_exec_file function is no longer needed.  It existed\nin order to show the right value (based on the current inferior) of\nthe remote exec-file, because the value in the global variable wasn\u0027t\nnecessarily the right one.  Now that the setting is defined using a\ngetter and a setter, the generic code does the right thing.  Also,\nthe show_remote_exec_file function showed the value in a very terse\nway.  Using the generic code, it now looks like:\n\n    The remote pathname for \"run\" is \"foo\".\n\nCo-Authored-By: Sébastien Darche \u003csdarche@efficios.com\u003e\nChange-Id: I5529632c4f6505ec6cab696ab825aa2cb88567cf\n","web_links":[{"name":"gitweb","tooltip":"Open in GitWeb","url":"/gitweb?p\u003dbinutils-gdb.git;a\u003dcommit;h\u003d2513240f1cb9703009fe7e86e01f87d8f3abee1c"}],"resolve_conflicts_web_links":[{"name":"gitweb","tooltip":"Open in GitWeb","url":"/gitweb?p\u003dbinutils-gdb.git;a\u003dcommit;h\u003d2513240f1cb9703009fe7e86e01f87d8f3abee1c"}]},"branch":"refs/heads/master"},"8b667b437a73518d9c327fb45f78a1fc09595955":{"kind":"REWORK","_number":50,"created":"2025-09-22 23:21:43.000000000","uploader":{"_account_id":1000090,"name":"Sébastien D","email":"sdarche@efficios.com","username":"Sebdar","avatars":[{"url":"https://www.gravatar.com/avatar/154d9c1bff6c233d2054afdc88226df9.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/154d9c1bff6c233d2054afdc88226df9.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/154d9c1bff6c233d2054afdc88226df9.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/154d9c1bff6c233d2054afdc88226df9.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d120","height":120}]},"ref":"refs/changes/31/5831/50","fetch":{"anonymous http":{"url":"https://review.lttng.org/binutils-gdb","ref":"refs/changes/31/5831/50","commands":{"Branch":"git fetch https://review.lttng.org/binutils-gdb refs/changes/31/5831/50 \u0026\u0026 git checkout -b change-5831 FETCH_HEAD","Checkout":"git fetch https://review.lttng.org/binutils-gdb refs/changes/31/5831/50 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://review.lttng.org/binutils-gdb refs/changes/31/5831/50 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://review.lttng.org/binutils-gdb refs/changes/31/5831/50 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://review.lttng.org/binutils-gdb refs/changes/31/5831/50","Reset To":"git fetch https://review.lttng.org/binutils-gdb refs/changes/31/5831/50 \u0026\u0026 git reset --hard FETCH_HEAD"}}},"commit":{"parents":[{"commit":"7fb4db4c6316347a83b152d94c9aa74641b970dc","subject":"gdb/riscv/record: remove possibility of recording an empty instruction","web_links":[{"name":"gitweb","tooltip":"Open in GitWeb","url":"/gitweb?p\u003dbinutils-gdb.git;a\u003dcommit;h\u003d7fb4db4c6316347a83b152d94c9aa74641b970dc"}]}],"author":{"name":"Simon Marchi","email":"simon.marchi@amd.com","date":"2021-08-23 15:09:51.000000000","tz":0},"committer":{"name":"Sébastien Darche","email":"sdarche@efficios.com","date":"2025-09-22 23:21:37.000000000","tz":-240},"subject":"gdb: fix per-inferior settings through MI/Python/Guile/with command/$_gdb_setting","message":"gdb: fix per-inferior settings through MI/Python/Guile/with command/$_gdb_setting\n\nThe settings whose source of truth is not the global variable registered\nwith the set/show commands may give erroneous values when accessed\nthrough MI, Python, Guile, the \"with\" command and the $_gdb_setting /\n$_gdb_setting_str convenience functions.  The instances of this I know\nof are per-inferior settings, such as \"set inferior-tty\", hence why this\npatch title says \"per-inferior\".\n\nTo give an example, here\u0027s the \"inferior-tty\" value accessed using MI\nand Python, dealing with two inferiors, where the shown value should\ndepend on the selected inferior:\n\n    (gdb)\n    add-inferior\n    \u0026\"add-inferior\\n\"\n    \u003dthread-group-added,id\u003d\"i2\"\n    ~\"[New inferior 2]\\n\"\n    ~\"Added inferior 2\\n\"\n    ^done\n    (gdb)\n    set inferior-tty /a\n    \u0026\"set inferior-tty /a\\n\"\n    \u003dcmd-param-changed,param\u003d\"inferior-tty\",value\u003d\"/a\"\n    ^done\n    (gdb)\n    inferior 2\n    \u0026\"inferior 2\\n\"\n    ~\"[Switching to inferior 2 [\u003cnull\u003e] (\u003cnoexec\u003e)]\\n\"\n    ^done\n    (gdb)\n    set inferior-tty /b\n    \u0026\"set inferior-tty /b\\n\"\n    \u003dcmd-param-changed,param\u003d\"inferior-tty\",value\u003d\"/b\"\n    ^done\n    (gdb)\n    -gdb-show inferior-tty\n    ^done,value\u003d\"/b\"\n    (gdb)\n    inferior 1\n    \u0026\"inferior 1\\n\"\n    ~\"[Switching to inferior 1 [\u003cnull\u003e] (\u003cnoexec\u003e)]\\n\"\n    ^done\n    (gdb)\n    -gdb-show inferior-tty\n    ^done,value\u003d\"/b\"\n\nThe last `-gdb-show` shows `/b` for inferior 1, we would expect `/a`.\n\n    (gdb) add-inferior\n    [New inferior 2]\n    Added inferior 2\n    (gdb) set inferior-tty /a\n    (gdb) inferior 2\n    [Switching to inferior 2 [\u003cnull\u003e] (\u003cnoexec\u003e)]\n    (gdb) set inferior-tty /b\n    (gdb) python print(gdb.parameter(\u0027inferior-tty\u0027))\n    /b\n    (gdb) inferior 1\n    [Switching to inferior 1 [\u003cnull\u003e] (\u003cnoexec\u003e)]\n    (gdb) python print(gdb.parameter(\u0027inferior-tty\u0027))\n    /b\n\nThe last `gdb.parameter` shows `/b` for inferior 1, we would expect\n`/a`.\n\nThe reason for this is the scratch variable used by the set command.\nSettings (the things conceptually created using add_setshow_* functions)\ncontain a pointer to a global variable, where the `set` command store\nthe value when executed. By default, the show command shows the value\nfrom this global variable as well.  Per-inferior settings are\nimplemented on top of regular global settings.  The trick is that they\nspecify a custom \"set\" command callback that copies the content from the\nscratch variable to the current inferior\u0027s structure.  The global\nvariable is therefore only used as a scratchpad between the set command\nand the callback.\n\nThese settings also use custom show callbacks that read the shown value\nfrom the current inferior\u0027s structure, ignoring the value in the scratch\nvariable.  These show functions therefore do the right thing, they show\na value based on the selected inferior.  MI\u0027s -gdb-show and Python\u0027s\ngdb.parameter, however, don\u0027t do that, they read the setting\u0027s value\nthrough the global variable pointer.  For per-inferior parameters, that\nvariable contains the last value set, not the value for the current\ninferior.\n\nIn my opinion, this bug exists because of the \"bad\" design of having the\nscratch variable.  I presume that at some point, all parameters were\nglobal, and this \"hack\" was added on top of that to get what looked like\nper-inferior parameters.\n\nI want to fix this in a somewhat nice way and try to evolve the design\nin the right direction.  A preceding patch (702991711a91 (\"gdb: Have\nsetter and getter callbacks for settings\") added versions of the\nadd_setshow functions that take a getter and setter callbacks instead of\na pointer to a global variable.  The getters / setters can get / set the\nvalue as they see fit (like, from the current inferior), without the\nneed for a temporary scratch variable.\n\nThis patch converts a few per-inferior settings to use this:\n\n - inferior-tty\n - args\n - cwd\n - remote exec-file\n - tdesc filename\n\nThe show callbacks (used to print setting values on the CLI in a custom\nway) do not really change.  The only difference is that they can now\ntrust the \"value\" argument they receive, even for per-inferior\nsettings.\n\nThe show_remote_exec_file function is no longer needed.  It existed\nin order to show the right value (based on the current inferior) of\nthe remote exec-file, because the value in the global variable wasn\u0027t\nnecessarily the right one.  Now that the setting is defined using a\ngetter and a setter, the generic code does the right thing.  Also,\nthe show_remote_exec_file function showed the value in a very terse\nway.  Using the generic code, it now looks like:\n\n    The remote pathname for \"run\" is \"foo\".\n\nCo-Authored-By: Sébastien Darche \u003csdarche@efficios.com\u003e\nChange-Id: I5529632c4f6505ec6cab696ab825aa2cb88567cf\n","web_links":[{"name":"gitweb","tooltip":"Open in GitWeb","url":"/gitweb?p\u003dbinutils-gdb.git;a\u003dcommit;h\u003d8b667b437a73518d9c327fb45f78a1fc09595955"}],"resolve_conflicts_web_links":[{"name":"gitweb","tooltip":"Open in GitWeb","url":"/gitweb?p\u003dbinutils-gdb.git;a\u003dcommit;h\u003d8b667b437a73518d9c327fb45f78a1fc09595955"}]},"branch":"refs/heads/master"},"9e48ccc7d83e61f5a56ebde13502ea2eb769ed40":{"kind":"REWORK","_number":51,"created":"2025-09-23 13:47:01.000000000","uploader":{"_account_id":1000090,"name":"Sébastien D","email":"sdarche@efficios.com","username":"Sebdar","avatars":[{"url":"https://www.gravatar.com/avatar/154d9c1bff6c233d2054afdc88226df9.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/154d9c1bff6c233d2054afdc88226df9.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/154d9c1bff6c233d2054afdc88226df9.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/154d9c1bff6c233d2054afdc88226df9.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d120","height":120}]},"ref":"refs/changes/31/5831/51","fetch":{"anonymous http":{"url":"https://review.lttng.org/binutils-gdb","ref":"refs/changes/31/5831/51","commands":{"Branch":"git fetch https://review.lttng.org/binutils-gdb refs/changes/31/5831/51 \u0026\u0026 git checkout -b change-5831 FETCH_HEAD","Checkout":"git fetch https://review.lttng.org/binutils-gdb refs/changes/31/5831/51 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://review.lttng.org/binutils-gdb refs/changes/31/5831/51 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://review.lttng.org/binutils-gdb refs/changes/31/5831/51 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://review.lttng.org/binutils-gdb refs/changes/31/5831/51","Reset To":"git fetch https://review.lttng.org/binutils-gdb refs/changes/31/5831/51 \u0026\u0026 git reset --hard FETCH_HEAD"}}},"commit":{"parents":[{"commit":"7fb4db4c6316347a83b152d94c9aa74641b970dc","subject":"gdb/riscv/record: remove possibility of recording an empty instruction","web_links":[{"name":"gitweb","tooltip":"Open in GitWeb","url":"/gitweb?p\u003dbinutils-gdb.git;a\u003dcommit;h\u003d7fb4db4c6316347a83b152d94c9aa74641b970dc"}]}],"author":{"name":"Simon Marchi","email":"simon.marchi@amd.com","date":"2021-08-23 15:09:51.000000000","tz":0},"committer":{"name":"Sébastien Darche","email":"sdarche@efficios.com","date":"2025-09-23 13:46:55.000000000","tz":-240},"subject":"gdb: fix per-inferior settings through MI/Python/Guile/with command/$_gdb_setting","message":"gdb: fix per-inferior settings through MI/Python/Guile/with command/$_gdb_setting\n\nThe settings whose source of truth is not the global variable registered\nwith the set/show commands may give erroneous values when accessed\nthrough MI, Python, Guile, the \"with\" command and the $_gdb_setting /\n$_gdb_setting_str convenience functions.  The instances of this I know\nof are per-inferior settings, such as \"set inferior-tty\", hence why this\npatch title says \"per-inferior\".\n\nTo give an example, here\u0027s the \"inferior-tty\" value accessed using MI\nand Python, dealing with two inferiors, where the shown value should\ndepend on the selected inferior:\n\n    (gdb)\n    add-inferior\n    \u0026\"add-inferior\\n\"\n    \u003dthread-group-added,id\u003d\"i2\"\n    ~\"[New inferior 2]\\n\"\n    ~\"Added inferior 2\\n\"\n    ^done\n    (gdb)\n    set inferior-tty /a\n    \u0026\"set inferior-tty /a\\n\"\n    \u003dcmd-param-changed,param\u003d\"inferior-tty\",value\u003d\"/a\"\n    ^done\n    (gdb)\n    inferior 2\n    \u0026\"inferior 2\\n\"\n    ~\"[Switching to inferior 2 [\u003cnull\u003e] (\u003cnoexec\u003e)]\\n\"\n    ^done\n    (gdb)\n    set inferior-tty /b\n    \u0026\"set inferior-tty /b\\n\"\n    \u003dcmd-param-changed,param\u003d\"inferior-tty\",value\u003d\"/b\"\n    ^done\n    (gdb)\n    -gdb-show inferior-tty\n    ^done,value\u003d\"/b\"\n    (gdb)\n    inferior 1\n    \u0026\"inferior 1\\n\"\n    ~\"[Switching to inferior 1 [\u003cnull\u003e] (\u003cnoexec\u003e)]\\n\"\n    ^done\n    (gdb)\n    -gdb-show inferior-tty\n    ^done,value\u003d\"/b\"\n\nThe last `-gdb-show` shows `/b` for inferior 1, we would expect `/a`.\n\n    (gdb) add-inferior\n    [New inferior 2]\n    Added inferior 2\n    (gdb) set inferior-tty /a\n    (gdb) inferior 2\n    [Switching to inferior 2 [\u003cnull\u003e] (\u003cnoexec\u003e)]\n    (gdb) set inferior-tty /b\n    (gdb) python print(gdb.parameter(\u0027inferior-tty\u0027))\n    /b\n    (gdb) inferior 1\n    [Switching to inferior 1 [\u003cnull\u003e] (\u003cnoexec\u003e)]\n    (gdb) python print(gdb.parameter(\u0027inferior-tty\u0027))\n    /b\n\nThe last `gdb.parameter` shows `/b` for inferior 1, we would expect\n`/a`.\n\nThe reason for this is the scratch variable used by the set command.\nSettings (the things conceptually created using add_setshow_* functions)\ncontain a pointer to a global variable, where the `set` command store\nthe value when executed. By default, the show command shows the value\nfrom this global variable as well.  Per-inferior settings are\nimplemented on top of regular global settings.  The trick is that they\nspecify a custom \"set\" command callback that copies the content from the\nscratch variable to the current inferior\u0027s structure.  The global\nvariable is therefore only used as a scratchpad between the set command\nand the callback.\n\nThese settings also use custom show callbacks that read the shown value\nfrom the current inferior\u0027s structure, ignoring the value in the scratch\nvariable.  These show functions therefore do the right thing, they show\na value based on the selected inferior.  MI\u0027s -gdb-show and Python\u0027s\ngdb.parameter, however, don\u0027t do that, they read the setting\u0027s value\nthrough the global variable pointer.  For per-inferior parameters, that\nvariable contains the last value set, not the value for the current\ninferior.\n\nIn my opinion, this bug exists because of the \"bad\" design of having the\nscratch variable.  I presume that at some point, all parameters were\nglobal, and this \"hack\" was added on top of that to get what looked like\nper-inferior parameters.\n\nI want to fix this in a somewhat nice way and try to evolve the design\nin the right direction.  A preceding patch (702991711a91 (\"gdb: Have\nsetter and getter callbacks for settings\") added versions of the\nadd_setshow functions that take a getter and setter callbacks instead of\na pointer to a global variable.  The getters / setters can get / set the\nvalue as they see fit (like, from the current inferior), without the\nneed for a temporary scratch variable.\n\nThis patch converts a few per-inferior settings to use this:\n\n - inferior-tty\n - args\n - cwd\n - remote exec-file\n - tdesc filename\n\nThe show callbacks (used to print setting values on the CLI in a custom\nway) do not really change.  The only difference is that they can now\ntrust the \"value\" argument they receive, even for per-inferior\nsettings.\n\nThe show_remote_exec_file function is no longer needed.  It existed\nin order to show the right value (based on the current inferior) of\nthe remote exec-file, because the value in the global variable wasn\u0027t\nnecessarily the right one.  Now that the setting is defined using a\ngetter and a setter, the generic code does the right thing.  Also,\nthe show_remote_exec_file function showed the value in a very terse\nway.  Using the generic code, it now looks like:\n\n    The remote pathname for \"run\" is \"foo\".\n\nCo-Authored-By: Sébastien Darche \u003csdarche@efficios.com\u003e\nChange-Id: I5529632c4f6505ec6cab696ab825aa2cb88567cf\n","web_links":[{"name":"gitweb","tooltip":"Open in GitWeb","url":"/gitweb?p\u003dbinutils-gdb.git;a\u003dcommit;h\u003d9e48ccc7d83e61f5a56ebde13502ea2eb769ed40"}],"resolve_conflicts_web_links":[{"name":"gitweb","tooltip":"Open in GitWeb","url":"/gitweb?p\u003dbinutils-gdb.git;a\u003dcommit;h\u003d9e48ccc7d83e61f5a56ebde13502ea2eb769ed40"}]},"branch":"refs/heads/master"},"551b9a42a7bad0cec5273fb49e93280db90a9b66":{"kind":"REWORK","_number":52,"created":"2025-09-23 14:47:58.000000000","uploader":{"_account_id":1000090,"name":"Sébastien D","email":"sdarche@efficios.com","username":"Sebdar","avatars":[{"url":"https://www.gravatar.com/avatar/154d9c1bff6c233d2054afdc88226df9.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/154d9c1bff6c233d2054afdc88226df9.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/154d9c1bff6c233d2054afdc88226df9.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/154d9c1bff6c233d2054afdc88226df9.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d120","height":120}]},"ref":"refs/changes/31/5831/52","fetch":{"anonymous http":{"url":"https://review.lttng.org/binutils-gdb","ref":"refs/changes/31/5831/52","commands":{"Branch":"git fetch https://review.lttng.org/binutils-gdb refs/changes/31/5831/52 \u0026\u0026 git checkout -b change-5831 FETCH_HEAD","Checkout":"git fetch https://review.lttng.org/binutils-gdb refs/changes/31/5831/52 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://review.lttng.org/binutils-gdb refs/changes/31/5831/52 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://review.lttng.org/binutils-gdb refs/changes/31/5831/52 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://review.lttng.org/binutils-gdb refs/changes/31/5831/52","Reset To":"git fetch https://review.lttng.org/binutils-gdb refs/changes/31/5831/52 \u0026\u0026 git reset --hard FETCH_HEAD"}}},"commit":{"parents":[{"commit":"7fb4db4c6316347a83b152d94c9aa74641b970dc","subject":"gdb/riscv/record: remove possibility of recording an empty instruction","web_links":[{"name":"gitweb","tooltip":"Open in GitWeb","url":"/gitweb?p\u003dbinutils-gdb.git;a\u003dcommit;h\u003d7fb4db4c6316347a83b152d94c9aa74641b970dc"}]}],"author":{"name":"Simon Marchi","email":"simon.marchi@amd.com","date":"2021-08-23 15:09:51.000000000","tz":0},"committer":{"name":"Sébastien Darche","email":"sdarche@efficios.com","date":"2025-09-23 14:47:52.000000000","tz":-240},"subject":"gdb: fix per-inferior settings through MI/Python/Guile/with command/$_gdb_setting","message":"gdb: fix per-inferior settings through MI/Python/Guile/with command/$_gdb_setting\n\nThe settings whose source of truth is not the global variable registered\nwith the set/show commands may give erroneous values when accessed\nthrough MI, Python, Guile, the \"with\" command and the $_gdb_setting /\n$_gdb_setting_str convenience functions.  The instances of this I know\nof are per-inferior settings, such as \"set inferior-tty\", hence why this\npatch title says \"per-inferior\".\n\nTo give an example, here\u0027s the \"inferior-tty\" value accessed using MI\nand Python, dealing with two inferiors, where the shown value should\ndepend on the selected inferior:\n\n    (gdb)\n    add-inferior\n    \u0026\"add-inferior\\n\"\n    \u003dthread-group-added,id\u003d\"i2\"\n    ~\"[New inferior 2]\\n\"\n    ~\"Added inferior 2\\n\"\n    ^done\n    (gdb)\n    set inferior-tty /a\n    \u0026\"set inferior-tty /a\\n\"\n    \u003dcmd-param-changed,param\u003d\"inferior-tty\",value\u003d\"/a\"\n    ^done\n    (gdb)\n    inferior 2\n    \u0026\"inferior 2\\n\"\n    ~\"[Switching to inferior 2 [\u003cnull\u003e] (\u003cnoexec\u003e)]\\n\"\n    ^done\n    (gdb)\n    set inferior-tty /b\n    \u0026\"set inferior-tty /b\\n\"\n    \u003dcmd-param-changed,param\u003d\"inferior-tty\",value\u003d\"/b\"\n    ^done\n    (gdb)\n    -gdb-show inferior-tty\n    ^done,value\u003d\"/b\"\n    (gdb)\n    inferior 1\n    \u0026\"inferior 1\\n\"\n    ~\"[Switching to inferior 1 [\u003cnull\u003e] (\u003cnoexec\u003e)]\\n\"\n    ^done\n    (gdb)\n    -gdb-show inferior-tty\n    ^done,value\u003d\"/b\"\n\nThe last `-gdb-show` shows `/b` for inferior 1, we would expect `/a`.\n\n    (gdb) add-inferior\n    [New inferior 2]\n    Added inferior 2\n    (gdb) set inferior-tty /a\n    (gdb) inferior 2\n    [Switching to inferior 2 [\u003cnull\u003e] (\u003cnoexec\u003e)]\n    (gdb) set inferior-tty /b\n    (gdb) python print(gdb.parameter(\u0027inferior-tty\u0027))\n    /b\n    (gdb) inferior 1\n    [Switching to inferior 1 [\u003cnull\u003e] (\u003cnoexec\u003e)]\n    (gdb) python print(gdb.parameter(\u0027inferior-tty\u0027))\n    /b\n\nThe last `gdb.parameter` shows `/b` for inferior 1, we would expect\n`/a`.\n\nThe reason for this is the scratch variable used by the set command.\nSettings (the things conceptually created using add_setshow_* functions)\ncontain a pointer to a global variable, where the `set` command store\nthe value when executed. By default, the show command shows the value\nfrom this global variable as well.  Per-inferior settings are\nimplemented on top of regular global settings.  The trick is that they\nspecify a custom \"set\" command callback that copies the content from the\nscratch variable to the current inferior\u0027s structure.  The global\nvariable is therefore only used as a scratchpad between the set command\nand the callback.\n\nThese settings also use custom show callbacks that read the shown value\nfrom the current inferior\u0027s structure, ignoring the value in the scratch\nvariable.  These show functions therefore do the right thing, they show\na value based on the selected inferior.  MI\u0027s -gdb-show and Python\u0027s\ngdb.parameter, however, don\u0027t do that, they read the setting\u0027s value\nthrough the global variable pointer.  For per-inferior parameters, that\nvariable contains the last value set, not the value for the current\ninferior.\n\nIn my opinion, this bug exists because of the \"bad\" design of having the\nscratch variable.  I presume that at some point, all parameters were\nglobal, and this \"hack\" was added on top of that to get what looked like\nper-inferior parameters.\n\nI want to fix this in a somewhat nice way and try to evolve the design\nin the right direction.  A preceding patch (702991711a91 (\"gdb: Have\nsetter and getter callbacks for settings\") added versions of the\nadd_setshow functions that take a getter and setter callbacks instead of\na pointer to a global variable.  The getters / setters can get / set the\nvalue as they see fit (like, from the current inferior), without the\nneed for a temporary scratch variable.\n\nThis patch converts a few per-inferior settings to use this:\n\n - inferior-tty\n - args\n - cwd\n - remote exec-file\n - tdesc filename\n\nThe show callbacks (used to print setting values on the CLI in a custom\nway) do not really change.  The only difference is that they can now\ntrust the \"value\" argument they receive, even for per-inferior\nsettings.\n\nThe show_remote_exec_file function is no longer needed.  It existed\nin order to show the right value (based on the current inferior) of\nthe remote exec-file, because the value in the global variable wasn\u0027t\nnecessarily the right one.  Now that the setting is defined using a\ngetter and a setter, the generic code does the right thing.  Also,\nthe show_remote_exec_file function showed the value in a very terse\nway.  Using the generic code, it now looks like:\n\n    The remote pathname for \"run\" is \"foo\".\n\nCo-Authored-By: Sébastien Darche \u003csdarche@efficios.com\u003e\nChange-Id: I5529632c4f6505ec6cab696ab825aa2cb88567cf\n","web_links":[{"name":"gitweb","tooltip":"Open in GitWeb","url":"/gitweb?p\u003dbinutils-gdb.git;a\u003dcommit;h\u003d551b9a42a7bad0cec5273fb49e93280db90a9b66"}],"resolve_conflicts_web_links":[{"name":"gitweb","tooltip":"Open in GitWeb","url":"/gitweb?p\u003dbinutils-gdb.git;a\u003dcommit;h\u003d551b9a42a7bad0cec5273fb49e93280db90a9b66"}]},"branch":"refs/heads/master"},"e1b054c4364a0f6dfede8ea59852f78a360e5aea":{"kind":"REWORK","_number":53,"created":"2025-09-23 18:19:30.000000000","uploader":{"_account_id":1000090,"name":"Sébastien D","email":"sdarche@efficios.com","username":"Sebdar","avatars":[{"url":"https://www.gravatar.com/avatar/154d9c1bff6c233d2054afdc88226df9.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/154d9c1bff6c233d2054afdc88226df9.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/154d9c1bff6c233d2054afdc88226df9.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/154d9c1bff6c233d2054afdc88226df9.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d120","height":120}]},"ref":"refs/changes/31/5831/53","fetch":{"anonymous http":{"url":"https://review.lttng.org/binutils-gdb","ref":"refs/changes/31/5831/53","commands":{"Branch":"git fetch https://review.lttng.org/binutils-gdb refs/changes/31/5831/53 \u0026\u0026 git checkout -b change-5831 FETCH_HEAD","Checkout":"git fetch https://review.lttng.org/binutils-gdb refs/changes/31/5831/53 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://review.lttng.org/binutils-gdb refs/changes/31/5831/53 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://review.lttng.org/binutils-gdb refs/changes/31/5831/53 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://review.lttng.org/binutils-gdb refs/changes/31/5831/53","Reset To":"git fetch https://review.lttng.org/binutils-gdb refs/changes/31/5831/53 \u0026\u0026 git reset --hard FETCH_HEAD"}}},"commit":{"parents":[{"commit":"7fb4db4c6316347a83b152d94c9aa74641b970dc","subject":"gdb/riscv/record: remove possibility of recording an empty instruction","web_links":[{"name":"gitweb","tooltip":"Open in GitWeb","url":"/gitweb?p\u003dbinutils-gdb.git;a\u003dcommit;h\u003d7fb4db4c6316347a83b152d94c9aa74641b970dc"}]}],"author":{"name":"Simon Marchi","email":"simon.marchi@amd.com","date":"2021-08-23 15:09:51.000000000","tz":0},"committer":{"name":"Sébastien Darche","email":"sdarche@efficios.com","date":"2025-09-23 18:19:25.000000000","tz":-240},"subject":"gdb: fix per-inferior settings through MI/Python/Guile/with command/$_gdb_setting","message":"gdb: fix per-inferior settings through MI/Python/Guile/with command/$_gdb_setting\n\nThe settings whose source of truth is not the global variable registered\nwith the set/show commands may give erroneous values when accessed\nthrough MI, Python, Guile, the \"with\" command and the $_gdb_setting /\n$_gdb_setting_str convenience functions.  The instances of this I know\nof are per-inferior settings, such as \"set inferior-tty\", hence why this\npatch title says \"per-inferior\".\n\nTo give an example, here\u0027s the \"inferior-tty\" value accessed using MI\nand Python, dealing with two inferiors, where the shown value should\ndepend on the selected inferior:\n\n    (gdb)\n    add-inferior\n    \u0026\"add-inferior\\n\"\n    \u003dthread-group-added,id\u003d\"i2\"\n    ~\"[New inferior 2]\\n\"\n    ~\"Added inferior 2\\n\"\n    ^done\n    (gdb)\n    set inferior-tty /a\n    \u0026\"set inferior-tty /a\\n\"\n    \u003dcmd-param-changed,param\u003d\"inferior-tty\",value\u003d\"/a\"\n    ^done\n    (gdb)\n    inferior 2\n    \u0026\"inferior 2\\n\"\n    ~\"[Switching to inferior 2 [\u003cnull\u003e] (\u003cnoexec\u003e)]\\n\"\n    ^done\n    (gdb)\n    set inferior-tty /b\n    \u0026\"set inferior-tty /b\\n\"\n    \u003dcmd-param-changed,param\u003d\"inferior-tty\",value\u003d\"/b\"\n    ^done\n    (gdb)\n    -gdb-show inferior-tty\n    ^done,value\u003d\"/b\"\n    (gdb)\n    inferior 1\n    \u0026\"inferior 1\\n\"\n    ~\"[Switching to inferior 1 [\u003cnull\u003e] (\u003cnoexec\u003e)]\\n\"\n    ^done\n    (gdb)\n    -gdb-show inferior-tty\n    ^done,value\u003d\"/b\"\n\nThe last `-gdb-show` shows `/b` for inferior 1, we would expect `/a`.\n\n    (gdb) add-inferior\n    [New inferior 2]\n    Added inferior 2\n    (gdb) set inferior-tty /a\n    (gdb) inferior 2\n    [Switching to inferior 2 [\u003cnull\u003e] (\u003cnoexec\u003e)]\n    (gdb) set inferior-tty /b\n    (gdb) python print(gdb.parameter(\u0027inferior-tty\u0027))\n    /b\n    (gdb) inferior 1\n    [Switching to inferior 1 [\u003cnull\u003e] (\u003cnoexec\u003e)]\n    (gdb) python print(gdb.parameter(\u0027inferior-tty\u0027))\n    /b\n\nThe last `gdb.parameter` shows `/b` for inferior 1, we would expect\n`/a`.\n\nThe reason for this is the scratch variable used by the set command.\nSettings (the things conceptually created using add_setshow_* functions)\ncontain a pointer to a global variable, where the `set` command store\nthe value when executed. By default, the show command shows the value\nfrom this global variable as well.  Per-inferior settings are\nimplemented on top of regular global settings.  The trick is that they\nspecify a custom \"set\" command callback that copies the content from the\nscratch variable to the current inferior\u0027s structure.  The global\nvariable is therefore only used as a scratchpad between the set command\nand the callback.\n\nThese settings also use custom show callbacks that read the shown value\nfrom the current inferior\u0027s structure, ignoring the value in the scratch\nvariable.  These show functions therefore do the right thing, they show\na value based on the selected inferior.  MI\u0027s -gdb-show and Python\u0027s\ngdb.parameter, however, don\u0027t do that, they read the setting\u0027s value\nthrough the global variable pointer.  For per-inferior parameters, that\nvariable contains the last value set, not the value for the current\ninferior.\n\nIn my opinion, this bug exists because of the \"bad\" design of having the\nscratch variable.  I presume that at some point, all parameters were\nglobal, and this \"hack\" was added on top of that to get what looked like\nper-inferior parameters.\n\nI want to fix this in a somewhat nice way and try to evolve the design\nin the right direction.  A preceding patch (702991711a91 (\"gdb: Have\nsetter and getter callbacks for settings\") added versions of the\nadd_setshow functions that take a getter and setter callbacks instead of\na pointer to a global variable.  The getters / setters can get / set the\nvalue as they see fit (like, from the current inferior), without the\nneed for a temporary scratch variable.\n\nThis patch converts a few per-inferior settings to use this:\n\n - inferior-tty\n - args\n - cwd\n - remote exec-file\n - tdesc filename\n\nThe show callbacks (used to print setting values on the CLI in a custom\nway) do not really change.  The only difference is that they can now\ntrust the \"value\" argument they receive, even for per-inferior\nsettings.\n\nThe show_remote_exec_file function is no longer needed.  It existed\nin order to show the right value (based on the current inferior) of\nthe remote exec-file, because the value in the global variable wasn\u0027t\nnecessarily the right one.  Now that the setting is defined using a\ngetter and a setter, the generic code does the right thing.  Also,\nthe show_remote_exec_file function showed the value in a very terse\nway.  Using the generic code, it now looks like:\n\n    The remote pathname for \"run\" is \"foo\".\n\nCo-Authored-By: Sébastien Darche \u003csdarche@efficios.com\u003e\nChange-Id: I5529632c4f6505ec6cab696ab825aa2cb88567cf\n","web_links":[{"name":"gitweb","tooltip":"Open in GitWeb","url":"/gitweb?p\u003dbinutils-gdb.git;a\u003dcommit;h\u003de1b054c4364a0f6dfede8ea59852f78a360e5aea"}],"resolve_conflicts_web_links":[{"name":"gitweb","tooltip":"Open in GitWeb","url":"/gitweb?p\u003dbinutils-gdb.git;a\u003dcommit;h\u003de1b054c4364a0f6dfede8ea59852f78a360e5aea"}]},"branch":"refs/heads/master"},"92902a3ba1716c9bb1526cbb88adc63d1e7a54a4":{"kind":"REWORK","_number":54,"created":"2025-09-23 18:38:49.000000000","uploader":{"_account_id":1000090,"name":"Sébastien D","email":"sdarche@efficios.com","username":"Sebdar","avatars":[{"url":"https://www.gravatar.com/avatar/154d9c1bff6c233d2054afdc88226df9.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/154d9c1bff6c233d2054afdc88226df9.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/154d9c1bff6c233d2054afdc88226df9.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/154d9c1bff6c233d2054afdc88226df9.jpg?d\u003dretro\u0026r\u003dr\u0026s\u003d120","height":120}]},"ref":"refs/changes/31/5831/54","fetch":{"anonymous http":{"url":"https://review.lttng.org/binutils-gdb","ref":"refs/changes/31/5831/54","commands":{"Branch":"git fetch https://review.lttng.org/binutils-gdb refs/changes/31/5831/54 \u0026\u0026 git checkout -b change-5831 FETCH_HEAD","Checkout":"git fetch https://review.lttng.org/binutils-gdb refs/changes/31/5831/54 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://review.lttng.org/binutils-gdb refs/changes/31/5831/54 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://review.lttng.org/binutils-gdb refs/changes/31/5831/54 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://review.lttng.org/binutils-gdb refs/changes/31/5831/54","Reset To":"git fetch https://review.lttng.org/binutils-gdb refs/changes/31/5831/54 \u0026\u0026 git reset --hard FETCH_HEAD"}}},"commit":{"parents":[{"commit":"7fb4db4c6316347a83b152d94c9aa74641b970dc","subject":"gdb/riscv/record: remove possibility of recording an empty instruction","web_links":[{"name":"gitweb","tooltip":"Open in GitWeb","url":"/gitweb?p\u003dbinutils-gdb.git;a\u003dcommit;h\u003d7fb4db4c6316347a83b152d94c9aa74641b970dc"}]}],"author":{"name":"Simon Marchi","email":"simon.marchi@amd.com","date":"2021-08-23 15:09:51.000000000","tz":0},"committer":{"name":"Sébastien Darche","email":"sdarche@efficios.com","date":"2025-09-23 18:38:45.000000000","tz":-240},"subject":"gdb: fix per-inferior settings through MI/Python/Guile/with command/$_gdb_setting","message":"gdb: fix per-inferior settings through MI/Python/Guile/with command/$_gdb_setting\n\nThe settings whose source of truth is not the global variable registered\nwith the set/show commands may give erroneous values when accessed\nthrough MI, Python, Guile, the \"with\" command and the $_gdb_setting /\n$_gdb_setting_str convenience functions.  The instances of this I know\nof are per-inferior settings, such as \"set inferior-tty\", hence why this\npatch title says \"per-inferior\".\n\nTo give an example, here\u0027s the \"inferior-tty\" value accessed using MI\nand Python, dealing with two inferiors, where the shown value should\ndepend on the selected inferior:\n\n    (gdb)\n    add-inferior\n    \u0026\"add-inferior\\n\"\n    \u003dthread-group-added,id\u003d\"i2\"\n    ~\"[New inferior 2]\\n\"\n    ~\"Added inferior 2\\n\"\n    ^done\n    (gdb)\n    set inferior-tty /a\n    \u0026\"set inferior-tty /a\\n\"\n    \u003dcmd-param-changed,param\u003d\"inferior-tty\",value\u003d\"/a\"\n    ^done\n    (gdb)\n    inferior 2\n    \u0026\"inferior 2\\n\"\n    ~\"[Switching to inferior 2 [\u003cnull\u003e] (\u003cnoexec\u003e)]\\n\"\n    ^done\n    (gdb)\n    set inferior-tty /b\n    \u0026\"set inferior-tty /b\\n\"\n    \u003dcmd-param-changed,param\u003d\"inferior-tty\",value\u003d\"/b\"\n    ^done\n    (gdb)\n    -gdb-show inferior-tty\n    ^done,value\u003d\"/b\"\n    (gdb)\n    inferior 1\n    \u0026\"inferior 1\\n\"\n    ~\"[Switching to inferior 1 [\u003cnull\u003e] (\u003cnoexec\u003e)]\\n\"\n    ^done\n    (gdb)\n    -gdb-show inferior-tty\n    ^done,value\u003d\"/b\"\n\nThe last `-gdb-show` shows `/b` for inferior 1, we would expect `/a`.\n\n    (gdb) add-inferior\n    [New inferior 2]\n    Added inferior 2\n    (gdb) set inferior-tty /a\n    (gdb) inferior 2\n    [Switching to inferior 2 [\u003cnull\u003e] (\u003cnoexec\u003e)]\n    (gdb) set inferior-tty /b\n    (gdb) python print(gdb.parameter(\u0027inferior-tty\u0027))\n    /b\n    (gdb) inferior 1\n    [Switching to inferior 1 [\u003cnull\u003e] (\u003cnoexec\u003e)]\n    (gdb) python print(gdb.parameter(\u0027inferior-tty\u0027))\n    /b\n\nThe last `gdb.parameter` shows `/b` for inferior 1, we would expect\n`/a`.\n\nThe reason for this is the scratch variable used by the set command.\nSettings (the things conceptually created using add_setshow_* functions)\ncontain a pointer to a global variable, where the `set` command store\nthe value when executed. By default, the show command shows the value\nfrom this global variable as well.  Per-inferior settings are\nimplemented on top of regular global settings.  The trick is that they\nspecify a custom \"set\" command callback that copies the content from the\nscratch variable to the current inferior\u0027s structure.  The global\nvariable is therefore only used as a scratchpad between the set command\nand the callback.\n\nThese settings also use custom show callbacks that read the shown value\nfrom the current inferior\u0027s structure, ignoring the value in the scratch\nvariable.  These show functions therefore do the right thing, they show\na value based on the selected inferior.  MI\u0027s -gdb-show and Python\u0027s\ngdb.parameter, however, don\u0027t do that, they read the setting\u0027s value\nthrough the global variable pointer.  For per-inferior parameters, that\nvariable contains the last value set, not the value for the current\ninferior.\n\nIn my opinion, this bug exists because of the \"bad\" design of having the\nscratch variable.  I presume that at some point, all parameters were\nglobal, and this \"hack\" was added on top of that to get what looked like\nper-inferior parameters.\n\nI want to fix this in a somewhat nice way and try to evolve the design\nin the right direction.  A preceding patch (702991711a91 (\"gdb: Have\nsetter and getter callbacks for settings\") added versions of the\nadd_setshow functions that take a getter and setter callbacks instead of\na pointer to a global variable.  The getters / setters can get / set the\nvalue as they see fit (like, from the current inferior), without the\nneed for a temporary scratch variable.\n\nThis patch converts a few per-inferior settings to use this:\n\n - inferior-tty\n - args\n - cwd\n - remote exec-file\n - tdesc filename\n\nThe show callbacks (used to print setting values on the CLI in a custom\nway) do not really change.  The only difference is that they can now\ntrust the \"value\" argument they receive, even for per-inferior\nsettings.\n\nThe show_remote_exec_file function is no longer needed.  It existed\nin order to show the right value (based on the current inferior) of\nthe remote exec-file, because the value in the global variable wasn\u0027t\nnecessarily the right one.  Now that the setting is defined using a\ngetter and a setter, the generic code does the right thing.  Also,\nthe show_remote_exec_file function showed the value in a very terse\nway.  Using the generic code, it now looks like:\n\n    The remote pathname for \"run\" is \"foo\".\n\nCo-Authored-By: Sébastien Darche \u003csdarche@efficios.com\u003e\nChange-Id: I5529632c4f6505ec6cab696ab825aa2cb88567cf\n","web_links":[{"name":"gitweb","tooltip":"Open in GitWeb","url":"/gitweb?p\u003dbinutils-gdb.git;a\u003dcommit;h\u003d92902a3ba1716c9bb1526cbb88adc63d1e7a54a4"}],"resolve_conflicts_web_links":[{"name":"gitweb","tooltip":"Open in GitWeb","url":"/gitweb?p\u003dbinutils-gdb.git;a\u003dcommit;h\u003d92902a3ba1716c9bb1526cbb88adc63d1e7a54a4"}]},"branch":"refs/heads/master"}},"requirements":[],"submit_records":[],"submit_requirements":[{"name":"Verified","description":"CI result status for build and tests is passing","status":"UNSATISFIED","is_legacy":false,"applicability_expression_result":{"fulfilled":true,"status":"PASS"},"submittability_expression_result":{"expression":"-label:Verified\u003dMIN","fulfilled":false,"status":"FAIL","passing_atoms":["label:Verified\u003dMIN"],"failing_atoms":[],"atom_explanations":{"label:Verified\u003dMIN":""}}},{"name":"Code-Review","description":"At least one maximum vote for label \u0027Code-Review\u0027 is required","status":"UNSATISFIED","is_legacy":false,"applicability_expression_result":{"fulfilled":true,"status":"PASS"},"submittability_expression_result":{"expression":"label:Code-Review\u003dMAX AND -label:Code-Review\u003dMIN","fulfilled":false,"status":"FAIL","passing_atoms":[],"failing_atoms":["label:Code-Review\u003dMAX","label:Code-Review\u003dMIN"],"atom_explanations":{"label:Code-Review\u003dMAX":"","label:Code-Review\u003dMIN":""}}}]}
