Faits :
A.
En date du 4 janvier 2021, le Ministère public genevois a classé la procédure pénale ouverte contre A._ en tant qu'elle portait sur une infraction à l'art. 291 CP. Il a toutefois mis à la charge de l'intéressé les frais de la procédure, arrêtés à 510 fr., au motif qu'il avait créé l'apparence d'une situation contraire au droit.
B.
Par arrêt du 22 mars 2021, la Chambre pénale de recours de la Cour de justice genevoise a rejeté le recours formé par A._ contre l'ordonnance du ministère public.
C.
Les faits à l'origine de la procédure sont en bref les suivants.
Le 12 décembre 2018, A._ a été reconnu coupable d'infractions à la loi fédérale sur les stupéfiants et à la loi fédérale sur les étrangers et condamné à une peine privative de liberté de 3 mois, son expulsion du territoire suisse étant par ailleurs ordonnée pour une durée de 5 ans.
Par courrier du 24 avril 2019, l'Office cantonal de la population et des migrations a informé A._, détenu à l'époque, qu'il était tenu de quitter la Suisse à sa libération, soit au plus tard le 8 mai 2019.
Le 3 juin 2020, A._ a été arrêté par la police. Il lui était notamment reproché d'avoir vendu de la drogue, d'être en séjour illégal en Suisse et de se trouver sur le territoire helvétique alors qu'il faisait l'objet d'une expulsion judiciaire.
D.
A._ forme un recours en matière pénale contre l'arrêt du 22 mars 2021. Il conclut, avec suite de frais et dépens, principalement à ce que son recours soit admis et les frais de la procédure de classement partiel mis à la charge de l'État de Genève. A titre subsidiaire, il conclut à l'annulation de l'arrêt attaqué et au renvoi de la cause à la cour cantonale pour nouvelle instruction, étant précisé que les conditions de l'art. 426 al. 2 CP ne sont pas réalisées. Il sollicite par ailleurs le bénéfice de l'assistance judiciaire.

Considérant en droit :
1.
Le recourant reproche à la cour cantonale d'avoir violé l'art. 426 al. 2 CPP en mettant à sa charge les frais de la procédure.
1.1. Conformément à l'art. 426 al. 2 CPP, lorsque la procédure fait l'objet d'une ordonnance de classement ou que le prévenu est acquitté, tout ou partie des frais de procédure peuvent être mis à sa charge s'il a, de manière illicite et fautive, provoqué l'ouverture de la procédure ou rendu plus difficile sa conduite.
La condamnation d'un prévenu acquitté à supporter tout ou partie des frais doit respecter la présomption d'innocence, consacrée par les art. 32 al. 1 Cst. et 6 par. 2 CEDH. Celle-ci interdit de rendre une décision défavorable au prévenu libéré en laissant entendre que ce dernier serait néanmoins coupable des infractions qui lui étaient reprochées. Une condamnation aux frais n'est ainsi admissible que si le prévenu a provoqué l'ouverture de la procédure pénale dirigée contre lui ou s'il en a entravé le cours. A cet égard, seul entre en ligne de compte un comportement fautif et contraire à une règle juridique, qui soit en relation de causalité avec les frais imputés. Pour déterminer si le comportement en cause est propre à justifier l'imputation des frais, le juge peut prendre en considération toute norme de comportement écrite ou non écrite résultant de l'ordre juridique suisse pris dans son ensemble, dans le sens d'une application par analogie des principes découlant de l'art. 41 CO. Le fait reproché doit constituer une violation claire de la norme de comportement (<ref-ruling> consid. 2.2). Une condamnation aux frais ne peut se justifier que si, en raison du comportement illicite du prévenu, l'autorité était légitimement en droit d'ouvrir une enquête. Elle est en tout cas exclue lorsque l'autorité est intervenue par excès de zèle, ensuite d'une mauvaise analyse de la situation ou par précipitation; la mise des frais à la charge du prévenu en cas d'acquittement ou de classement de la procédure doit en effet rester l'exception (<ref-ruling> consid. 2.2; arrêt 6B_457/2021 du 22 octobre 2021 consid. 6.1).
1.2. La cour cantonale a considéré que même si à la date de l'arrestation du recourant les mesures mises en place pour lutter contre la pandémie l'empêchaient de quitter la Suisse, raison pour laquelle la procédure a été classée en tant qu'elle portait sur l'infraction à l'art. 291 CP, il n'en demeurait pas moins qu'il était tenu de quitter le territoire au plus tard le 8 mai 2019 et qu'il y était donc resté fautivement depuis cette date.
1.3. C'est à juste titre que la cour cantonale a relevé que le recourant n'avait pas quitté le territoire suisse, comme il était tenu de le faire au plus tard le 8 mai 2019, à un moment où il lui était parfaitement possible de le faire. La poursuite de son séjour en Suisse au-delà de cette date a représenté un comportement illicite imputable au recourant. On ne saurait reprocher aux autorités de poursuite pénale d'avoir ouvert une instruction et procédé, à la suite de l'arrestation du recourant, à deux auditions de ce dernier afin d'éclaircir les circonstances en raison desquelles il se trouvait encore en Suisse en dépit de l'expulsion prononcée à son encontre, avant de clore ladite instruction. Au demeurant, le montant des frais mis à la charge du recourant, qui s'élève à 510 fr., montre que les actes d'instruction ont été limités et il ne ressort nullement de l'arrêt attaqué que des actes inutiles auraient été effectués, de sorte que c'est en vain que le recourant tente de se prévaloir d'une rupture du lien de causalité.
1.4. Le recourant se plaint d'arbitraire dans l'établissement des faits.
Le Tribunal fédéral n'est pas une autorité d'appel, auprès de laquelle les faits pourraient être rediscutés librement. Il est lié par les constatations de fait de la décision entreprise (art. 105 al. 1 LTF), à moins qu'elles n'aient été établies en violation du droit ou de manière manifestement inexacte au sens des art. 97 al. 1 et 105 al. 2 LTF, à savoir, pour l'essentiel, de façon arbitraire au sens de l'art. 9 Cst. Une décision n'est pas arbitraire du seul fait qu'elle apparaît discutable ou même critiquable; il faut qu'elle soit manifestement insoutenable et cela non seulement dans sa motivation mais aussi dans son résultat (<ref-ruling> consid. 1.3.1; <ref-ruling> consid. 1.1; <ref-ruling> consid. 1.1; sur la notion d'arbitraire voir <ref-ruling> consid. 4.1.2 et les arrêts cités). Le Tribunal fédéral n'entre en matière sur les moyens fondés sur la violation de droits fondamentaux, dont l'interdiction de l'arbitraire, que s'ils ont été invoqués et motivés de manière précise (art. 106 al. 2 LTF); les critiques de nature appellatoire sont irrecevables (<ref-ruling> consid. 4.1.2 et les arrêts cités).
Le recourant reproche à la cour cantonale d'avoir passé sous silence son incarcération pendant la période du 27 mai 2019 au 21 mai 2020 et fait valoir qu'au moment de sa libération en mai 2020 les mesures liées à la pandémie étaient déjà en vigueur.
Cet argument n'est pas pertinent. En effet, la détention du recourant à compter du 27 mai 2019 ne change rien au fait que celui-ci a eu l'occasion de quitter la Suisse, comme il en avait l'obligation au plus tard le 8 mai 2019.
Au surplus la précision, fournie " à toutes fins utiles " par le recourant, selon laquelle il aurait été condamné le 19 juillet 2019 pour s'être trouvé en rupture de ban durant la période du 9 au 27 mai 2019 ne peut être prise en considération dès lors que cet élément ne ressort pas de l'arrêt attaqué sans que le recourant ne développe à cet égard de grief d'arbitraire satisfaisant aux exigences de l'art. 106 al. 2 LTF.
1.5. Enfin, la demande du recourant à être autorisé à produire de nouveaux moyens de preuve n'est pas pertinente puisque les moyens de preuve sollicités sont destinés à établir qu'il se trouvait en détention pour la période du 27 mai 2019 au 21 mai 2020, circonstance qui, comme cela a été constaté ci-dessus, n'a pas d'influence sur l'issue de la procédure.
2.
Mal fondé, le recours doit être rejeté dans la mesure où il est recevable. Comme il était dénué de chances de succès, la demande d'assistance judiciaire doit être rejetée (art. 64 al. 1 LTF). Le recourant, qui succombe, supportera les frais judiciaires, dont le montant sera fixé en tenant compte de sa situation financière, laquelle n'apparaît pas favorable (art. 65 al. 2 et 66 al. 1 LTF).

Par ces motifs, le Tribunal fédéral prononce :
1.
Le recours est rejeté dans la mesure où il est recevable.
2.
La demande d'assistance judiciaire est rejetée.
3.
Les frais judiciaires, arrêtés à 1'200 fr., sont mis à la charge du recourant.
4.
Le présent arrêt est communiqué aux parties et à la Chambre pénale de recours de la Cour de justice de la République et canton de Genève.
Lausanne, le 18 novembre 2021
Au nom de la Cour de droit pénal
du Tribunal fédéral suisse
Le Juge présidant : Denys
La Greffière : Paquier-Boinay